考虑以下程序。对于处理,无论如何都必须经历所有处理阶段。所以我的问题是:是否在这个解析阶段'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'
在这个阶段仍被视为字符串。请更正任何更正。
事实上即使EXECUTE IMMEDIATE 'select * asfd';
在第3行被替换它仍然成功地遵守。所以我猜上面的解释是正确的。
是。在EXECUTE IMMEDIATE,运行时引擎必须首先解析语句。即你无法绑定模式元素(表,列等)的名称的原因
更多细节:解析阶段保证正确定义SQL语句。 PL / SQL可以告诉以下语句有效而无需知道:xyz
的值。
'UPDATE emp SET sal = :xyz'
但是PL / SQL如何知道以下语句是否形成良好?我们不能,所以限制。
'UPDATE emp SET :col_name = :xyz'