• 南大通用GBase8s 常用SQL语句(241)


    1.1 SET DEFERRED_PREPARE 语句

    使用 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 语句的系列:

    l 随同 FETCH 或 PUT 语句操作的 PREPARE、DECLARE、OPEN 语句块

    l 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 特性。然后,该应用表现下列行为:

    l 序列 PREPARE、DECLARE、OPEN 以 OPEN 语句将 PREPARE 语句发送到数据库服务器。如果准备好的语句有语法错误,则数据库服务器不将错误消息返回给应用,直到应用为准备好的语句声明游标并打开该游标。

    l 序列 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 语句发送到数据库服务器。

    SET DEFERRED_PREPARE 的示例
    下列代码段展示带有 PREPARE、EXECUTE 语句块的 SET DEFERRED_PREPARE 语句。在此情况下,数据库服务器立即执行 PREPARE 和 EXECUTE 语句:

    EXEC SQL BEGIN DECLARE SECTION;

    int a;

    EXEC SQL END DECLARE SECTION;

    EXEC SQL allocate descriptor ‘desc’;

    EXEC SQL create database test;

    EXEC SQL create table x (a int);

    /* 启用 Deferred-Prepare 特性 */

    EXEC SQL set deferred_prepare enabled;

    /* 准备 INSERT 语句 */

    EXEC SQL prepare ins_stmt from ‘insert into x values(?)’;

    a = 2;

    EXEC SQL EXECUTE ins_stmt using :a;

    if (SQLCODE)

    printf(“EXECUTE : SQLCODE is %d\n”, SQLCODE);

    随同 OPTOFC 使用 Deferred-Prepare
    您可组合地使用 Deferred-Prepare 与“Open-Fetch-Close 优化”(OPTOFC)。OPTOFC 特性推迟将 OPEN 消息发送到数据库服务器,直到发送 FETCH 消息为止。如果您同时启用 Deferred-Prepare 和 OPTOFC,则发生下列情况:

    l 如果准备好的语句的文本包含语法错误,则不将错误消息返回到应用,直到执行第一个 FETCH 语句为止。

    l 不可执行 DESCRIBE 语句,直到 FETCH 语句之后为止。

    l 在可执行 DESCRIBE 或 GET DESCRIPTOR 语句之前,您必须发出 ALLOCATE DESCRIPTOR 语句。

    数据库服务器执行 SET DESCRIPTOR 语句的内部执行,设置系统描述符区域中的 TYPE、LENGTH、DATA 和其他字段。您在 FETCH 语句之后指定 GET DESCRIPTOR 语句来查看返回的数据。

  • 相关阅读:
    【短文】【踩坑】可以在Qt Designer给QTableWidge添加右键菜单吗?
    docker启动,解决jenkins内存占用过高
    重生奇迹MU之地下城简介
    Ajax模拟视频点赞功能
    毕设 连锁酒店
    Maven的总结
    PHP代码审计2—这些函数必知必会
    机器学习与模式识别(判断+简答题)
    程序员积累的编程知识十年后有多少变得没用?
    docker 容器和镜像的备份
  • 原文地址:https://blog.csdn.net/zyy19990813/article/details/126478892