orcl如何复制一条记录,并修改其中两个字段,id设有主键,求解

在存储过程就是要复制一条记录保存在本表,新记录要修改两个字段
INSERT INTO PD_PROJECT SELECT * FROM PD_PROJECT WHERE ROW_ID =RID;
用这个有主键约束不行

create or replace function FN_PD_FINA_BFBK(ROWIDS in varchar2)
return varchar2 is
RES varchar2(200);
STRRLT varchar2(4000);
MT MYTABLE := MYTABLE();
RID varchar2(32);
/* V_FINA_STATUS varchar2(30);*/
/* V_FINA_MONEY_SUM NUMBER(16,2);*/
V_FUND_IN_SUM NUMBER(16,2);
V_FINA_W_MONEY_SUM NUMBER(16,2);
begin
STRRLT := '';

MT := FN_PD_SPLIT(ROWIDS, ',');
for I in MT.FIRST .. MT.LAST loop
if MT.EXISTS(I) then
RID := MT(I);
select FUND_IN_SUM-FINA_MONEY_SUM into V_FINA_W_MONEY_SUM from PD_PROJECT where ROW_ID = RID;
--select FINA_W_MONEY_SUM into V_FINA_W_MONEY_SUM from PD_PROJECT where ROW_ID = RID;
select FUND_IN_SUM into V_FUND_IN_SUM from PD_PROJECT where ROW_ID = RID;

IF V_FINA_W_MONEY_SUM > 0 THEN
/* update PD_PROJECT_FINA_APPLY A
set A.FINA_MONEY=(SELECT FUND_IN_SUM FROM PD_PROJECT WHERE ROW_ID = RID);*/

update PD_PROJECT T
set T.FINA_STATUS = '02',
/* T.FINA_MONEY_SUM=FUND_IN_SUM,*/
T.FINA_W_MONEY_SUM=V_FINA_W_MONEY_SUM
where T.ROW_ID = RID;
create table tmp as SELECT * FROM PD_PROJECT WHERE ROW_ID =RID;

update tmp
set FUND_IN_SUM='1',FINA_MONEY_SUM='2';
commit;
where row_id=RID
delete from PD_PROJECT WHERE ROW_ID =RID;
commit;
insert into PD_PROJECT select * from tmp;
commit;
END IF ;

IF V_FINA_W_MONEY_SUM = 0 THEN
update PD_PROJECT T
set T.FINA_STATUS = '01'
where T.ROW_ID = RID;
END IF ;

IF V_FINA_W_MONEY_SUM = V_FUND_IN_SUM THEN
update PD_PROJECT T
set T.FINA_STATUS = ''
where T.ROW_ID = RID;
END IF ;

end if;
end loop;
return RES;
end FN_PD_FINA_BFBK;

1个回答

建一个临时表。
create table tmp as SELECT * FROM PD_PROJECT WHERE ROW_ID =RID;
update tmp
set col1='',col2=''
where row_id=RID;
commit;
delete from PD_PROJECT WHERE ROW_ID =RID;
commit;
insert into PD_PROJECT select * from tmp;
commit;

ashuaige
ashuaige 另外不要在函数中create table。可以每次王临时表插数据时先 EXECUTE IMMEDIATE 'TRUNCATE TABLE tmp'
6 个月之前 回复
ashuaige
ashuaige 回复weixin_45548886: 参数类型和数据库的类型不匹配引起的吧。
6 个月之前 回复
weixin_45548886
weixin_45548886 出现索引中丢失in或out 参数; 2,要怎么弄
6 个月之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问

相似问题

2
关于orcl SQL语句 多表链接查询,在相同值里取时间最大的那个。
2
使用mybatis得不到SqlSessionFactory,哪位大神帮帮忙?
2
跟着视频学oracle,视频不用默认的ORCL而是用net manager新建了一个数据库
1
为啥python代码突然卡住,然后按ctrl+c后又可以继续运行?
1
使用springcloud 和 连接池 连接orcale数据库报错,折磨一天了,请大佬解救,启动都正常的
1
centos 7.5 安装Oracle10g报错all_no_orcl
1
测试 Oracle 数据库连接时,如何减少因 IP 设置错误而导致长时间无响应?
2
oracle 监听问题 --sqlplus可以登录,其他程序不可以连接
1
【mybatis generator的报错】前期配置问题!!!!!官方文件看了一直也一头雾水
1
数据泵如何完全覆盖导入数据库,覆盖原数据库里所有的内容
0
oracle 11g里面将配置文件上载到em资料档案库失败
1
本机链接虚拟机数据库,出现ORA-12569: TNS:packet checksum failure错误提醒
1
oracle 11.2.0.1版本数据库最近部署的环境数据库监听总断还无法自启;必须手动去启动服务
2
Oracle在客户端as system不能登陆数据库
1
oracle10g连不上了,12514错误到12560
1
source /etc/profile 报错,很多命令不可使用,怎么解决?
1
求助!用logstash将oracle中的数据导入elasticsearch中出现如下错误
1
windows系统的orcl32位版本11.2.0.1.0的安全补丁谁有发我一份
1
一个activiti的小demo,启动的时候报空指针异常
3
客户端的sqlplus报ORA-12560:TNS:协议适配器错误