以下代码是存储过程中的一段。表名是通过变量tblname获取的。 jydate是该存储过程输入参数。
v_sqlstr1:='insert into info_error
select b.id,a.no,
from '||tblname||' a,custinfo b
where a.bank_no=b.bank_no
and a.tdate=jydate';
execute immediate v_sqlstr1; --第6行
存储过程编译通过,但在执行的时候报错:“无效列名”,报错位置在最后一行,也就是第6行。
但是所有的表和列都是存在且正确的,我估计还是自己的动态sql写的有问题,尤其是在insert中
嵌套一个select,而动态表名tblname又是在select语句中的。
请教正确的实现方法,谢谢!
v_sqlstr1:='insert into info_error
select b.id,a.no,
from '||tblname||' a,custinfo b
where a.bank_no=b.bank_no
and a.tdate=jydate';
execute immediate v_sqlstr1; --第6行
存储过程编译通过,但在执行的时候报错:“无效列名”,报错位置在最后一行,也就是第6行。
但是所有的表和列都是存在且正确的,我估计还是自己的动态sql写的有问题,尤其是在insert中
嵌套一个select,而动态表名tblname又是在select语句中的。
请教正确的实现方法,谢谢!
select b.id,a.no,
from '||tblname||' a,custinfo b
where a.bank_no=b.bank_no
and a.tdate=jydate';
execute immediate v_sqlstr1;可能是多了一个逗号
十之八九是列名写错了。
select b.id,a.no,
from '||tblname||' a,custinfo b
where a.bank_no=b.bank_no
and a.tdate=jydate';
execute immediate v_sqlstr1;
v_sqlstr1:='insert into info_error
select b.id,a.no,
from '||tblname||' a,custinfo b
where a.bank_no=b.bank_no
and a.tdate=jydate'; --- debug the sql dbms_output.put_line('[debug sql]||'v_sqlstr1||'[debug end]');
---execute immediate v_sqlstr1; --第6行
SQL>set serveroutput on;
SQL>exec procedurename;先把sql打出来看看就知道了==================================================================
Inthirties关注Oracle数据库 维护 优化,安全,备份,恢复,迁移,故障处理如果你需要帮助或想和我一起学习的请联系
联系方式QQ:370140387
电子邮件:[email protected]
网站: http://www.inthirties.com
select b.id,a.no
from '||tblname||' a,custinfo b
where a.bank_no=b.bank_no
and a.tdate=to_date('''||jydate||''',''yyyymmdd'')';
dbms_output.put_line(v_sqlstr1);
execute immediate v_sqlstr1;