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

问题描述 投票:1回答:1

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

oracle parsing plsql dynamic-sql
1个回答
0
投票

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

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

'UPDATE emp SET sal = :xyz'

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

'UPDATE emp SET :col_name = :xyz'
© www.soinside.com 2019 - 2024. All rights reserved.