lonesomexz 2018-11-07 06:44 采纳率: 50%
浏览 1916
已采纳

ORACLE 存储过程 关于游标循环从一个表COPY到另一个表插入问题


 create or replace procedure insertspzl as
is_tb number(2):=1;-- 1 已经同步 2 未同步 3 修改状态
spbh VARCHAR2(255);
sccj VARCHAR2(255);
sccjpd VARCHAR2(255);  --判断生产厂家是否存在  变量
jxname VARCHAR2(255);
jxnamepd VARCHAR2(255);
spfl VARCHAR2(255);
jyfw VARCHAR2(255); 

cursor cur is select trim(商品编号) spbh,trim(生产厂商) sccj,trim(剂型) jx,trim(商品类型) spfl,trim(商品类型) jyfw from 商品资料@TEST;
begin
--  增加资料处理字段
--  alter table zl_spzlb add (bzdw VARCHAR2(255));
--  alter table zl_spzlb add (sccj VARCHAR2(255));
--  alter table zl_spzlb add (jx VARCHAR2(255));
--  alter table zl_spzlb add (spfl VARCHAR2(255));

-- For 循环逐条插入记录
for temp in cur loop
  spbh :=temp.spbh;
  sccj :=temp.sccj;
  jxname :=temp.jx;
  spfl :=temp.spfl;
  jyfw :=temp.jyfw;
     select trim(是否同步) into is_tb from 商品资料@TEST where trim(商品编号)=spbh ;
   Dbms_Output.put_line('--打印is_tb--'||is_tb||'--编号--'||spbh);
-- If 判断单条条件处理
if is_tb =1  then
   Dbms_Output.put_line('--发现未同步商品--'||spbh);
   Dbms_Output.put_line('--厂家--'||sccj);
   Dbms_Output.put_line('开始插入数据');

--插入商品资料
 insert into zl_spzlb
 (resid,bh,spbh,name,sptym,slv,pzwh,spcd,cctj,is_zdyh,is_ty,bzdw,spgg,sccj,jx,spfl)
 select seq_acl_res_resid.nextval,trim(商品编号),trim(商品编号),trim(商品名称),trim(通用名),
 trim(税率),trim(批准文号),trim(产地),
 decode(trim(储存条件),'密封,置阴凉处','阴凉、暗凉(密闭,遮光)','密封','阴凉、暗凉(密闭,遮光)',
 '密封,置阴凉处(不超过20°)','阴凉、暗凉(密闭,遮光)','遮光','阴凉、暗凉(密闭,遮光)','阴凉',
 '阴凉、暗凉(密闭,遮光)','常温','常温(干燥0℃-30℃)','冷藏','冷藏(2℃-10℃)','其他'),
 decode(trim(养护措施),'普通养护',2,'重点养护',1),decode(trim(是否停用),'否',2,'是',1),trim(单位),
 trim(规格),trim(生产厂商),trim(剂型), trim(商品类型)
 from  商品资料@TEST 
 where trim(商品编号)=spbh;

--插入包装资料
 Dbms_Output.put_line('--商品--'||spbh);
 insert into zl_bzggzlb(bzid,spid,jlgg,is_hd,name)
 select seq_zl_bzggzlb_bzid.nextval,a.resid,1,1,a.bzdw from        zl_spzlb a where a.spbh=spbh;
--更新
 update zl_spzlb a set (a.lsbzid,a.pfbzid)=(Select b.bzid,b.bzid From zl_bzggzlb b Where a.resid=b.spid and a.spbh=spbh) where a.spbh =spbh;


 end loop;
  commit;  
--for 循坏结束

end insertspzl;

游标循环不允许再 遍历游标的时候
有insert的操作,并且执行了commit
但是如果commit 放在循化外面 会在获取
商品资料@TEST
第二行记录插入时候
--插入包装资料
在这一块把第一次生产的数据带出来重复插入
导致
--更新
这一块没办法进行 返回多行
如何去隔离上一次循环 不影响下一次并且最后提交都提交

求大大们指教

  • 写回答

1条回答 默认 最新

  • lonesomexz 2018-11-07 10:43
    关注

    已经解决 变量名字和字段重复 互等可能存在问题,更改同样的名字即可

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 有人知道怎么将自己的迁移策略布到edgecloudsim上使用吗?
  • ¥15 错误 LNK2001 无法解析的外部符号
  • ¥50 安装pyaudiokits失败
  • ¥15 计组这些题应该咋做呀
  • ¥60 更换迈创SOL6M4AE卡的时候,驱动要重新装才能使用,怎么解决?
  • ¥15 让node服务器有自动加载文件的功能
  • ¥15 jmeter脚本回放有的是对的有的是错的
  • ¥15 r语言蛋白组学相关问题
  • ¥15 Python时间序列如何拟合疏系数模型
  • ¥15 求学软件的前人们指明方向🥺