考虑以下程序。对于处理,无论如何都必须经历所有处理阶段。所以我的问题是:这个解析阶段'Select job_id from asfd'
是否仍被视为字符串,而EXECUTE IMMEDIATE
语句'Select job_id from asfd'
的执行阶段现在再次被解析为SQL语句?
CREATE OR REPLACE PROCEDURE test_ei
IS
BEGIN
EXECUTE IMMEDIATE ‘select job_id from asfd’; //line 3
END;
我在here中找到的一个解释是asdf
表不存在但是成功编译了gut,因此'Select job_id from asfd'
在此阶段仍被视为字符串。有任何更正请。
事实上,即使第3行中EXECUTE IMMEDIATE 'select * asfd';
被替换,它仍然成功地符合。所以我猜上面的解释是正确的。
答案 0 :(得分:0)
是。在EXECUTE IMMEDIATE,运行时引擎必须首先解析语句。即你无法绑定模式元素(表,列等)的名称的原因
更多细节:
解析阶段保证正确定义SQL语句。 PL / SQL可以告诉以下语句有效而无需知道:xyz
的值。
'UPDATE emp SET sal = :xyz'
但PL / SQL如何知道以下语句是否形成良好?我们不能,所以限制。
'UPDATE emp SET :col_name = :xyz'