在 Oracle 存储过程中使用动态 sql

a1e*_*x07 2 oracle dynamic-sql

假设我有以下程序

CREATE PROCEDURE foo (table1_id IN TABLE1.table1_id%type, 
                     table1_val IN TABLE1.table1_value%type) 
AS 
  SQL_UPDATE VARCHAR2(500) := 'UPDATE TABLE1 SET table1_value =:1 WHERE table1_id = :2';
BEGIN
  --.....
  --1 : 
    EXECUTE IMMEDIATE SQL_UPDATE USING foo.table1_val, foo.table1_id;
  --2 : 
    UPDATE TABLE1 SET table1_value = foo.table1_val WHERE table1_id = foo.table1_id;

END;
Run Code Online (Sandbox Code Playgroud)

除了样式/可读性之外,在这种情况下(我的意思是绝对可以避免的情况)使用动态查询 (1) 与 (2) 相比是否有任何性能损失?

谢谢你。

Dav*_*dge 6

我可能这样做的唯一原因是,如果我需要处理一个在编译时可能不存在的对象——例如,如果我有代码来根据需要创建新的外部表。

顾名思义,PL/SQL编译时不会解析动态SQL语句,所以你不知道它是否正确,并且依赖项不会存储在数据库中。