如何使用动态SQL实现从动态表INSERT INTO SELECT?解决缺失关键字错误
问题分析与解决
你的错误根源在于动态SQL字符串里直接写了变量v_tbl,Oracle会把它当成表名字面量,而不是你定义的变量值,同时关联时用的别名tab也没有对应到动态表上。
修正后的代码
declare v_tbl varchar2(4000) := 'TBL'; begin execute immediate 'Insert into emp(col1, col2, col3) select fname, lname, origin from source src inner join ' || v_tbl || ' tab on src.id=tab.id'; end;
关键说明
- 表名属于SQL结构部分,不能用绑定变量传递,必须通过字符串拼接把变量值插入到动态SQL语句中。
- 给动态引入的表加上别名
tab,确保关联条件里的tab.id能正确指向该表。 - 如果你的
v_tbl值来自外部输入,要额外做合法性校验,避免SQL注入风险。
内容的提问来源于stack exchange,提问作者John Al
相关产品推荐
相关产品推荐

