是否在运行时解析EXECUTE IMMEDIATE中的SQL语句?

时间:2017-12-14 09:08:32

标签: oracle parsing plsql dynamic-sql

考虑以下程序。对于处理,无论如何都必须经历所有处理阶段。所以我的问题是:这个解析阶段'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';被替换,它仍然成功地符合。所以我猜上面的解释是正确的。

1 个答案:

答案 0 :(得分:0)

是。在EXECUTE IMMEDIATE,运行时引擎必须首先解析语句。即你无法绑定模式元素(表,列等)的名称的原因

更多细节: 解析阶段保证正确定义SQL语句。 PL / SQL可以告诉以下语句有效而无需知道:xyz的值。

'UPDATE emp SET sal = :xyz'

但PL / SQL如何知道以下语句是否形成良好?我们不能,所以限制。

'UPDATE emp SET :col_name = :xyz'