修改如下:create or replace procedure pc_117proc( PcNo in varchar2, UpdateDate in varchar2 ) as CURSOR PcCur(PcNo varchar2,UpdateDate varchar2) IS SELECT * FROM pc_117 where PC_NO=PCNO AND STOREDATE=UPDATEDATE; BEGIN for v_sor in PcCur(PcNo,UpdateDate) loop; UPDATE pc_r_117 set PC_ID=v_sor.PC_ID ,PC_NO=v_sor.PC_NO , ....... PSY_EXP=v_sor.PSY_EXP where PC_NO=PCNO; end loop; END pppc_117proc;提醒不要关闲游标了,已隐式关闲了,把上更新的值改为v_sor为前缀就可以了。
不用for也可以,但要定义一个行类型 as CURSOR PcCur(PcNo varchar2,UpdateDate varchar2) IS SELECT * FROM pc_117 where PC_NO=PCNO AND STOREDATE=UPDATEDATE; v_pc_117 pc_117%rowtype; BEGIN OPEN PcCur(PcNo,UpdateDate); FETCH PcCur INTO v_pc_117; UPDATE pc_r_117 set PC_ID=v_pc_117.PC_ID ,PC_NO=v_pc_117.PC_NO , ..... PSY_EXP=v_pc_117.PSY_EXP where PC_NO=PCNO; close PcCur; END pppc_117proc; 把前缀改为v_pc_117.以后最好自已先动脑,动动手,不要有事没事往贴里发!
PcNo in varchar2,
UpdateDate in varchar2
)
as
CURSOR PcCur(PcNo varchar2,UpdateDate varchar2) IS SELECT * FROM pc_117 where PC_NO=PCNO AND STOREDATE=UPDATEDATE;
BEGIN
for v_sor in PcCur(PcNo,UpdateDate) loop;
UPDATE pc_r_117 set
PC_ID=v_sor.PC_ID ,PC_NO=v_sor.PC_NO ,
.......
PSY_EXP=v_sor.PSY_EXP where PC_NO=PCNO;
end loop;
END pppc_117proc;提醒不要关闲游标了,已隐式关闲了,把上更新的值改为v_sor为前缀就可以了。
而用到的是pcrec呀?写错了!
但也应该报pls-00201呀?
我只更新一条数据,不用LOOP吧
:=.(@%;
符号 ":=" 被替换为 "PCCUR" 后继续。
Line: 9
Text: PcCur_rec PcCur%ROWTYPE;
是什么意思,以上几位提的,我试了,也没成。
as
CURSOR PcCur(PcNo varchar2,UpdateDate varchar2) IS SELECT * FROM pc_117 where PC_NO=PCNO AND STOREDATE=UPDATEDATE;
v_pc_117 pc_117%rowtype;
BEGIN
OPEN PcCur(PcNo,UpdateDate);
FETCH PcCur INTO v_pc_117;
UPDATE pc_r_117 set
PC_ID=v_pc_117.PC_ID ,PC_NO=v_pc_117.PC_NO ,
.....
PSY_EXP=v_pc_117.PSY_EXP where PC_NO=PCNO;
close PcCur;
END pppc_117proc;
把前缀改为v_pc_117.以后最好自已先动脑,动动手,不要有事没事往贴里发!