【问题标题】:Is SQL statement in EXECUTE IMMEDIATE parsed at run time?EXECUTE IMMEDIATE 中的 SQL 语句是否在运行时解析?
【发布时间】:2017-12-14 09:08:32
【问题描述】:

考虑以下程序。对于处理,它无论如何都必须经过所有处理阶段。所以我的问题是:在这个解析阶段'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】:

是的。在 EXECUTE IMMEDIATE 时,运行时引擎必须首先解析语句。也就是不能在模式元素(表、列等)的名称中绑定的原因

更多详情: 解析阶段保证了正确定义 SQL 语句。 PL/SQL 无需知道:xyz 的值就可以判断以下语句是有效的。

'UPDATE emp SET sal = :xyz'

但是 PL/SQL 怎么知道下面的语句是否格式正确呢?我们不能,所以限制。

'UPDATE emp SET :col_name = :xyz'

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-04-15
    • 2019-03-14
    • 2015-10-07
    • 1970-01-01
    • 2019-06-26
    • 2018-09-27
    • 2021-04-15
    • 2018-04-20
    相关资源
    最近更新 更多