Collection Contents 上一页 下一页 PDF

ASA SQL 参考

SQL 语句

EXECUTE IMMEDIATE 语句 [SP]


说明 

此语句用于使动态构造的语句能够从过程内执行。

语法 1 

EXECUTE IMMEDIATE [ execute-option ] string-expression

execute-option:
  WITH QUOTES [ ON | OFF ]
WITH ESCAPES { ON | OFF }
WITH RESULT SET { ON | OFF }

语法 2 

EXECUTE ( string-expression )

参数 

WITH QUOTES    当指定 WITH QUOTES 或 WITH QUOTES ON 时,假定字符串表达式中的所有双引号都用于界定标识符。当未指定 WITH QUOTES 或指定了 WITH QUOTES OFF 时,对字符串表达式中的双引号的处理取决于 QUOTED_IDENTIFIER 选项的当前设置。

如果使用传递到存储过程中的对象名构造要执行的语句,但该名称可能需要双引号并且当 QUOTED_IDENTIFIER 设置为 OFF 时可能调用该过程,这时 WITH QUOTES 很有用。

有关详细信息,请参见 QUOTED_IDENTIFIER 选项 [compatibility]

WITH ESCAPES    WITH ESCAPES OFF 使得字符串表达式中的任何转义序列(如 \n\x\\)被忽略。例如,两个连续的反斜杠仍保留为两个反斜杠,而不会转换为一个反斜杠。缺省设置等同于 WITH ESCAPES ON。

WITH ESCAPES OFF 的用途之一是为了更简便的执行引用了包含反斜杠的文件名的动态构造语句。

在某些环境下,string-expression 中的转义序列在执行 EXECUTE IMMEDIATE 语句之前已被转换。例如,复合语句在执行之前进行语分析,转义序列会在分析过程中被转换,而不论 WITH ESCAPES 如何设置。在此类环境下,WITH ESCAPES OFF 可防止进一步的转换。例如:

BEGIN
   DECLARE String1 LONG VARCHAR;
   DECLARE String2 LONG VARCHAR;
   EXECUTE IMMEDIATE
        'SET String1 = ''One backslash: \\\\ ''';
     EXECUTE IMMEDIATE WITH ESCAPES OFF
        'SET String2 = ''Two backslashes: \\\\ ''';
   SELECT String1, String2
END

WITH RESULT SET    可以通过指定 WITH RESULT SET ON 让 EXECUTE IMMEDIATE 语句返回结果集。使用该子句,包含过程被标记为返回结果集。如果未包含此子句,在该语句返回结果集的情况下,调用该过程时将报告一个错误。

注意 
缺省选项为 WITH RESULT SET OFF,表示语句执行时不产生结果集。
用法 

EXECUTE 语句扩展了可以从过程和触发器内执行的语句的范围。它使您可以执行动态预准备语句,比如用传递到过程中的参数构造的语句。

此语句中的字符串必须用单引号括起来,并且此语句必须位于一行上。

EXECUTE IMMEDIATE 执行的语句只能引用全局变量。

在 Transact-SQL 存储过程和触发器的内部只能使用语法 2。

权限 

无。此语句用过程所有者的权限执行,而不是用调用过程的用户的权限执行。

副作用 

无。但是,如果此语句是副作用为自动提交的数据定义语句,则会提交。

有关在过程中使用 EXECUTE IMMEDIATE 语句的详细信息,请参见在过程中使用 EXECUTE IMMEDIATE 语句

另请参见 
标准和兼容性 
示例 

下面的过程创建一个表,其中表名作为过程的参数提供。EXECUTE IMMEDIATE 语句必须全部在一行上。

CREATE PROCEDURE CreateTableProc(
                  IN tablename char(30)
                  )
BEGIN
   EXECUTE IMMEDIATE
   'CREATE TABLE ' || tablename ||
   ' ( column1 INT PRIMARY KEY)'
END

调用过程并创建名为 mytable 的表:

CALL CreateTableProc( 'mytable' )

有关在返回结果集的查询中使用 EXECUTE IMMEDIATE 的示例,请参见在过程中使用 EXECUTE IMMEDIATE 语句


Collection Contents 上一页 下一页 PDF