SET CURRENT SQL_CCFLAGS 语句

SET CURRENT SQL_CCFLAGS 语句可更改 CURRENT SQL_CCFLAGS 专用寄存器的值。

调用

此语句可嵌入应用程序中或者以交互方式发出。 它是可动态准备的可执行语句。

权限

不需要执行任何操作。

语法

Read syntax diagramSkip visual syntax diagramSETCURRENT SQL_CCFLAGS=variablestring-constant

描述

variable
指定包含一个或多个名称/值对(以逗号分隔)的变量。
该变量必须具有以下特征 (SQLSTATE 42815):
  • 数据类型必须是 CHAR 或 VARCHAR。 变量内容的实际长度不能超过专用寄存器的最大长度。
  • 它必须是一串空格、一个空字符串或者包含一个或多个名称/值对(用冒号分隔名称与值)。 该名称必须是有效的普通标识。 与名称关联的值必须是 BOOLEAN 常量、INTEGER 常量或关键字 NULL。
  • 如果使用固定长度的字符变量,那么必须在右侧用空格填充。
  • 它可以在字符串的开头或结尾、逗号字符或冒号字符周围包含额外的空格。 将忽略空格。
  • 它不能为空值。
string-constant
指定包含一个或多个名称/值对(用逗号分隔)的字符串常量。
该字符串常量必须具有以下特征 (SQLSTATE 42815):
  • 它必须是字符串常量。 该常量的长度不能超过专用寄存器的最大长度。
  • 它必须是一串空格、一个空字符串或者包含一个或多个名称/值对(用冒号分隔名称与值)。 该名称必须是有效的普通标识。 与名称关联的值必须是 BOOLEAN 常量、INTEGER 常量或关键字 NULL。
  • 它可以在字符串的开头或结尾、逗号字符或冒号字符周围包含额外的空格。 将忽略空格。

注意

  • 如果 CURRENT SQL_FLAGS 专用寄存器的内容中出现重复名称,那么将仅使用最后一个(最右侧)值。 专用寄存器值将仅包含与所用值重复的名称的一个实例。 将具有不同值的重复名称并置到 CURRENT SQL_CCFLAGS 值的操作可用于覆盖某些条件编译值,同时保留其他值。
  • 当检索到 CURRENT SQL_CCFLAGS 时,返回的字符串包括大写形式的唯一名称/值对(用逗号和空格分隔多个名称/值对)。 这些名称/值对按照其指定顺序排列,重复的名称仅出现在它第一次出现的位置,但反映了它最后一次出现的位置中的值。
  • CURRENT SQL_CCFLAGS 专用寄存器可以设置为对数据库定义的缺省值,方法是从 SYSIBMADM.DBCFG 中检索 NAME='sql_ccflags' 的 VALUE 列并将其存储在变量中,然后将该变量分配给专用寄存器。
  • 事务注意事项:SET SQL_CCFLAGS 语句不是可落实的操作。 ROLLBACK 对 CURRENT SQL_CCFLAGS 没有影响。

示例

  • 示例 1: 定义会话的条件编译值以指示服务器为 Db2® 9.7 并且调试为 false。
      SET CURRENT SQL_CCFLAGS 'db2v97:true, debug:false'
  • 示例 2:扩展现有 CURRENT SQL_CCFLAGS,以将 debug 设置为 true 并定义跟踪级别。
      BEGIN
        DECLARE LIST VARCHAR(1024);
        SET LIST = CASE WHEN (CURRENT SQL_CCFLAGS = ' ')
                    THEN 'tracelvl:3,debug:true'
                    ELSE CURRENT SQL_CCFLAGS
                         concat ',tracelvl:3,debug:true'
                    END;
        SET CURRENT SQL_CCFLAGS = LIST;
      END

    在赋值中使用 CASE 表达式来处理 CURRENT SQL_CCFLAGS 专用寄存器不包含任何条件编译值的可能性,从而导致变量 LIST 的值中出现前导逗号。

    在执行 Example 1 中的语句和此示例中的复合语句之后,将返回 CURRENT SQL_CCFLAGS 专用寄存器的查询:
    DB2V97:TRUE, DEBUG:TRUE, TRACELVL:3
    尽管 DEBUG 的条件编译值在变量 LIST 中出现了两次,但它在最初出现的专用寄存器值中仅出现了一次。