EXECUTE IMMEDIATE '' [INTO [DEFAULT ]] [USING ] [READS SQL DATA] EXECUTE IMMEDIATE 执行字符串参数中传递的 SQL 语句。使用 EXECUTE IMMEDIATE 执行的查询结果将附加到过程的结果迭代器。
还可以使用 INTO 和 USING 子句将标量和表值传入或传出。通过 INTO 子句分配给变量的结果集不会附加到过程结果遍历器。
附加后缀 READS SQL DATA 时,语句被视为只读。由于无法在编译时检查要执行的语句是否为只读,因此如果执行的语句不是只读的,该操作将返回运行时错误。只读声明具有以下优势:
为避免为只读过程或函数中的每个 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;