南大通用GBase8s 常用SQL语句(134)

    1. EXECUTE IMMEDIATE 语句

使用 EXECUTE IMMEDIATE 语句来执行等同于 PREPARE、EXECUTE 和 FREE 语句实现的那些任务,但只作为单个操作。

请随同 GBase 8s ESQL/C 和 SPL 使用该动态 SQL 语句。

语法

 

元素

描述

限制

语法

char_expr 

取值为字符数据类型的表达式

必须取值为CHAR、LVARCHAR、NCHAR、NVARCHAR 或 VARCHAR 数据类型

表达式 

statement 

有效 SQL 语句的文本

请参阅下列的 statement_var 的相同章节

请参阅本章节。

statement _var 

包含 statement 的变量或(在 ESQL/C 中)以分号分隔的语句列表

必须是先前声明的 CHAR、NCHAR、NVARCHAR 或 VARCHAR (或在 SPL 中,LVARCHAR)类型的变量。请参阅 EXECUTE IMMEDIATE 和限制性语句 和 对有效语句的限制。

Language specific

用法

EXECUTE IMMEDIATE 语句动态地执行在程序执行期间构造的单个 SQL 语句(或在 ESQL/C 例程中,以分号分隔的 SQL 语句列表)。例如,您可从程序输入获取数据库的名称,将 DATABASE 语句构建为程序变量,然后使用 EXECUTE IMMEDIATE 来执行该语句,以打开指定的数据库。

在 ESQL/C 例程内,由变量或引用的字符串指定的语句文本可包括多个 SQL 语句,如果用分号(;)分隔符来分隔连续的语句的话。然而, 在 SPL 例程中,仅可包括一个语句。statement 不可为 SPL 语句,但可为在 EXECUTE IMMEDIATE 和r限制性语句 或 对有效语句的限制 章节中未列出的任何 SQL 语句。

如果跟在 IMMEDIATE 关键字后的参数有效,则被分析并执行;然后立即释放所有数据结构和内存资源。除非您使用 EXECUTE IMMEDIATE,不然这些操作需要单独的 PREPARE、EXECUTE 和 FREE 语句。

如果会话环境值(诸如发出 EXECUTE IMMEDIATE 语句的 ESQL/C 或 SPL 例程的 EXTDIRECTIVES、OPTCOMPIND 或 USELASTCOMMITTED 设置)与相应的 ONCONFIG 参数值不同,则会话环境值覆盖它们。

在支持隐式事务的符合 ANSI/ISO 的数据库中,在缺省情况下,EXECUTE IMMEDIATE 语句不开启新的事务。然而,执行指定的 SQL 语句文本可开启新的事务。

EXECUTE IMMEDIATE 和限制性语句

不可跟在下列 SQL 语句之后执行 EXECUTE IMMEDIATE 语句。

  1. CLOSE
  2. CONNECT
  3. DECLARE
  4. DISCONNECT
  5. EXECUTE
  6. EXECUTE FUNCTION
  7. EXECUTE PROCEDURE
  8. FETCH
  9. FLUSH
  10. FREE
  11. GET DESCRIPTOR
  12. GET DIAGNOSTICS
  13. OPEN
  14. OUTPUT
  15. PREPARE
  16. PUT
  17. SELECT
  18. SET AUTOFREE
  19. SET CONNECTION
  20. SET DEFERRED_PREPARE
  21. SET DESCRIPTOR
  22. WHENEVER

对于 EXECUTE PROCEDURE,该限制仅引用与返回一个或多个值的调用。

EXECUTE IMMEDIATE 支持作为语句文本的唯一的 SELECT 语句形式为 SELECT ... INTO TEMP table。要了解 SELECT 语句中 INTO TEMP table 子句的语法,请参阅 INTO table 子句。

此外,ESQL/C 不可使用 EXECUTE IMMEDIATE 语句来执行包含由分号分隔的多个 SQL 语句的文本中的下列语句:

  1. CLOSE DATABASE
  2. CREATE DATABASE
  3. DATABASE
  4. DROP DATABASE
  5. SELECT(SELECT INTO TEMP 除外)

EXECUTE IMMEDIATE 语句不可处理包括问号(?)符号作为占位符的 SQL 语句文本。请使用 PREPARE 语句和或者游标或者 EXECUTE 语句来执行动态构建的 SELECT 语句。

(在 SPL 例程中,EXECUTE IMMEDIATE 语句仅可执行单个 SQL 语句。如果紧跟在 IMMEDIATE 关键字后的参数赋值为多个 SQL 语句的列表,或为 NULL 值,或为非有效 SQL 语句的文本,则数据库服务器发出运行时错误。)

对有效语句的限制

下列限制应用于那些包含在紧跟在 EXECUTE IMMEDIATE 关键字之后的字符表达式、引用字符串或语句变量中的语句:

  1. SQL 语句不可包含主语言注释。
  2. 主语言变量的名称不像在准备好的文本中那样被识别。
  3. 您可使用的唯一标识符是在当前数据库的系统目录中注册的名称,诸如表名称和列名称。
  4. 该语句不可引用主变量列表或描述符;不可包含任何问号(?)占位符,这允许随同 PREPARE 语句使用。
  5. 该文本不可包括任何嵌入的 SQL 语句前缀,诸如美元符号($)或关键字 EXEC SQL。
  6. 虽然不是必需的,在语句文本中可包括 SQL 语句结束符(;)。
  7. 该文本不可包括任何嵌入的 SQL 语句前缀,诸如美元符号($)或关键字 EXEC SQL。

EXECUTE IMMEDIATE 不可处理输入主变量,这对集合变量是必需的。请使用 EXECUTE 语句或游标来处理对集合变量的准备好的访问。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值