使用 SET DEFERRED_PREPARE 语句来控制客户端处理是否推迟将 PREPARE 语句发送到数据库服务器,直到发送 OPEN 或 EXECUTE 语句为止。
仅
GBase 8s
支持此语句,这是对 SQL 的 ANSI/ISO
标准的扩展。您仅可随同 GBase 8s ESQL/C 使用此语句。
用法
在缺省情况下,SET DEFERRED_PREPARE 语句导致应用程序推迟将 PREPARE 语句发送到数据库服务器,直到执行 OPEN 或 EXECUTE 语句。实际上,PREPARE
语句与其他语句捆绑在一起,以便在客户端和服务器之间发送消息的一个来回,而不是两个。此 Deferred-Prepare 特性可影响下列动态 SQL 语句的系列:
- 随同 FETCH 或 PUT 语句操作的 PREPARE、DECLARE、OPEN 语句块
- EXECUTE 或 EXECUTE IMMEDIATE 语句跟随的 PREPARE
您可为 SET DEFERRED_PREPARE 指定 ENABLED 或 DISABLED 选项。
如果您未指定选项,则缺省的是 ENABLED。下列示例缺省地启用 Deferred-Prepare 特性:
EXEC SQL set deferred_prepare;
ENABLED 选项在应用之内启用 Deferred-Prepare 特性。下列示例显式地指定 ENABLED 选项:
EXEC SQL set deferred_prepare enabled;
在应用发出 SET DEFERRED_PREPARE ENABLED 之后,在该应用中为后续的 PREPARE 语句启用 Deferred-Prepare 特性。然后,该应用表现下列行为:
- 序列 PREPARE、DECLARE、OPEN 以 OPEN 语句将 PREPARE
语句发送到数据库服务器。如果准备好的语句有语法错误,则数据库服务器不将错误消息返回给应用,直到应用为准备好的语句声明游标并打开该游标。
- 序列 PREPARE、EXECUTE 随同 EXECUTE 语句将 PREPARE 语句发送到数据库服务器。如果准备好的语句包含语法错误,则数据库服务器不将错误消息返回到应用,直到应用尝试执行该准备好的语句为止。
如果在包含 DESCRIBE 语句的 PREPARE、DECLARE、OPEN 语句块中启用 Deferred-Prepare,则 DESCRIBE 语句必须跟在
OPEN 语句而不是 PREPARE 语句之后。如果 DESCRIBE 跟着 PREPARE,则 DESCRIBE 语句导致错误。
使用 DISABLED 选项来在该应用之内禁用 Deferred-Prepare 特性。下列示例指定 DISABLED 选项:
EXEC SQL set deferred_prepare disabled;
如果您指定 DISABLED 选项,则当执行 PREPARE 语句时,应用将每一 PREPARE 语句发送到数据库服务器。