create or replace procedure tqgy_yyxx_test
as
V_L3SAMPLEID VARCHAR2(20);
V_INSPCHAR VARCHAR2(120);
V_INSPECTRESULT VARCHAR2(20);
V_TRANS_DATE VARCHAR2(30);
V_TOTAL1 number;
V_M varchar2(130) ;
S varchar2(500);
cursor cur_jyjg is
select a.l3sampleid,a.inspchar,a.inspectresult,a.trans_date
from LES_TQGX_JYJH a
where a.l3sampleid='030112051509';
begin
open cur_jyjg;
loop
fetch cur_jyjg into V_L3SAMPLEID,V_INSPCHAR,V_INSPECTRESULT,V_TRANS_DATE;
exit when cur_jyjg%notfound; select count(*) into V_TOTAL1 from LES_JYSJ_HSQ t where t.patternno=V_L3SAMPLEID;
if V_TOTAL1=0 then
begin
V_M:=V_INSPCHAR;
S:='insert into LES_JYSJ_HSQ(patternno,matno,changb,Jih,'||V_M||',QYTIME)
values('||V_L3SAMPLEID||',substr('||V_L3SAMPLEID||',1,1),substr('||V_L3SAMPLEID||',2,1),substr('||V_L3SAMPLEID||',3,2),
'||V_INSPECTRESULT||',substr('||V_L3SAMPLEID||',5,6))';
execute immediate S;
end;
end if;
end loop;
close cur_jyjg;
end;
V_M是数据库一个字段的名称变量,如果直接写成V_M:='字段名',动态sql就可以执行,如果写成 V_M:=V_INSPCHAR,execute immediate S 就报错,V_INSPCHAR的值为什么不能赋给V_M??
as
V_L3SAMPLEID VARCHAR2(20);
V_INSPCHAR VARCHAR2(120);
V_INSPECTRESULT VARCHAR2(20);
V_TRANS_DATE VARCHAR2(30);
V_TOTAL1 number;
V_M varchar2(130) ;
S varchar2(500);
cursor cur_jyjg is
select a.l3sampleid,a.inspchar,a.inspectresult,a.trans_date
from LES_TQGX_JYJH a
where a.l3sampleid='030112051509';
begin
open cur_jyjg;
loop
fetch cur_jyjg into V_L3SAMPLEID,V_INSPCHAR,V_INSPECTRESULT,V_TRANS_DATE;
exit when cur_jyjg%notfound; select count(*) into V_TOTAL1 from LES_JYSJ_HSQ t where t.patternno=V_L3SAMPLEID;
if V_TOTAL1=0 then
begin
V_M:=V_INSPCHAR;
S:='insert into LES_JYSJ_HSQ(patternno,matno,changb,Jih,'||V_M||',QYTIME)
values('||V_L3SAMPLEID||',substr('||V_L3SAMPLEID||',1,1),substr('||V_L3SAMPLEID||',2,1),substr('||V_L3SAMPLEID||',3,2),
'||V_INSPECTRESULT||',substr('||V_L3SAMPLEID||',5,6))';
execute immediate S;
end;
end if;
end loop;
close cur_jyjg;
end;
V_M是数据库一个字段的名称变量,如果直接写成V_M:='字段名',动态sql就可以执行,如果写成 V_M:=V_INSPCHAR,execute immediate S 就报错,V_INSPCHAR的值为什么不能赋给V_M??
S:='select patternno,matno,changb,Jih,'||V_M||',QYTIME from LES_JYSJ_HSQ'
V_M 这时候不是字段名而是一个数值
dbms_output.PUT_LINE( V_INSPCHAR )输出