在动态sql中使用绑定变量,代码如下
v_sql :='insert into remark(code,name) select code,name from :xn';
execute immediate v_sql using v_tablename;
在执行的时候报错
ora-00903:invalid table name
论坛里面的一位版主告诉我:
不能将表名、列名作为绑定变量,因为这样是没有意义的
我的理解如下:绑定变量的好处是为了共享执行计划,避免多次的硬解析;但是如果表名或者列名使用了绑定变量,即便oralce认可了,共享了执行计划,但是对于不同的表或者列,一般最优的执行计划是不同的;所以共享的执行计划对于新的表来讲是没有意义的,也是不可取的
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/28803801/viewspace-773630/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/28803801/viewspace-773630/