使用 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 和限制性语句 或 对有效语句的限制 章节中未列出的任何 SQL 语句。
如果跟在 IMMEDIATE 关键字后的参数有效,则被分析并执行;然后立即释放所有数据结构和内存资源。除非您使用 EXECUTE IMMEDIATE,不然这些操作需要单独的 PREPARE、EXECUTE 和 FREE 语句。
如果会话环境值(诸如发出 EXECUTE IMMEDIATE 语句的 ESQL/C 或 SPL 例程的 EXTDIRECTIVES、OPTCOMPIND 或 USELASTCOMMITTED 设置)与相应的 ONCONFIG 参数值不同,则会话环境值覆盖它们。
在支持隐式事务的符合 ANSI/ISO 的数据库中,在缺省情况下,EXECUTE IMMEDIATE 语句不开启新的事务。然而,执行指定的 SQL 语句文本可开启新的事务。