执行动态SQL创建表时遭遇无效标识符错误求助
解决Oracle动态SQL中「无效标识符」错误
你遇到的问题根源在于:动态SQL的单引号字符串里,r0和r1被Oracle当成了数据库对象的标识符(比如列名),而非你传入的输入变量,所以触发「无效标识符」错误。
下面是两种可行的解决办法:
方法一:使用绑定变量(推荐)
这是最安全且性能最优的方式,能避免SQL注入风险,同时让Oracle正确识别变量:
EXECUTE IMMEDIATE 'create table temp parallel (degree 4) nologging as select e.* from employee e where e.emp_id between :1 and :2' USING r0, r1; /
用:1、:2作为占位符,通过USING子句把实际的r0、r1变量值传入动态SQL即可。
方法二:字符串拼接(不推荐)
如果场景特殊必须用拼接,直接把变量值嵌入SQL字符串(数值类型无需加单引号):
EXECUTE IMMEDIATE 'create table temp parallel (degree 4) nologging as select e.* from employee e where e.emp_id between ' || r0 || ' and ' || r1; /
注意:这种方式存在SQL注入风险,仅在变量来源完全可信的场景下使用。
内容的提问来源于stack exchange,提问作者Aman Kumar Singh
相关产品推荐
相关产品推荐

