您好,我是小DAI,专注于数据库管理员相关的技术问答,请问有什么可以帮您?

立即执行

语法

EXECUTE IMMEDIATE '' [INTO  [DEFAULT ]] [USING ] [READS SQL DATA]

描述

EXECUTE IMMEDIATE 执行字符串参数中传递的 SQL 语句。使用 EXECUTE IMMEDIATE 执行的查询结果将附加到过程的结果迭代器。

还可以使用 INTO 和 USING 子句将标量和表值传入或传出。通过 INTO 子句分配给变量的结果集不会附加到过程结果遍历器。

附加后缀 READS SQL DATA 时,语句被视为只读。由于无法在编译时检查要执行的语句是否为只读,因此如果执行的语句不是只读的,该操作将返回运行时错误。只读声明具有以下优势:

  • DSQL 可用于只读上下文,例如只读过程和表用户定义函数

  • 只读 DSQL 可以与其他只读操作并行化,从而缩短整体执行时间。

    为避免为只读过程或函数中的每个 DSQL 语句重复后缀 READS SQL DATA,无论后缀如何,都将自动将 DSQL 视为只读。但是,仍可以添加后缀 。

    CREATE PROCEDURE Proc1(IN A NVARCHAR(12)) READS SQL DATA as
    

    BEGIN

    EXEC 'SELECT * FROM ' || :A;

    END

    示例

    使用动态 SQL 删除表的内容 tab,插入值,最后检索表中的所有结果。

    CREATE TABLE tab (i int);
    
    

    CREATE PROCEDURE proc_dynamic_result2(i int) AS

    BEGIN

    EXEC 'DELETE from tab';

    EXEC 'INSERT INTO tab VALUES (' || :i || ')';

    EXECUTE IMMEDIATE 'SELECT * FROM tab ORDER BY i';

    END;