更改开始

ALTER TRIGGER 语句(高级触发器)

FL 500 AL TER TRIGGER(高级)语句用于更改当前服务器上高级触发器的描述。

FL 500 有关基本触发器和高级触发器的区别,请参阅触发器

调用ALTER TRIGGER(高级)

可以通过交互方式发出此语句。 这是一个可执行语句,只有在DYNAMICRULES RUN行为生效时才能动态准备。 更多信息,请参阅授权ID和动态SQL

ALTER TRIGGER(高级)授权

以下定义的特权套装必须至少包含以下一项:

  • 扳机所有权
  • 架构上的ALTERIN权限
  • 系统 DBADM 权限
  • SYSCTRL 权限
  • SYSADM 权限
  • 安装 SYSOPR 权限(当前进程的 SQLID 设置为 SYSINSTL 时)

与模式名称匹配的授权ID隐式拥有该模式的ALTERIN权限。

在以下情况下,可能需要额外特权:

  • 如果指定了触发器规格
    • 特权套装必须至少包含以下一项:
      • 扳机所有权
      • DATAACCESS 权限
      • SYSADM 权限
    • 触发器所有者必须拥有SYSADM权限、DATAACCESS权限或以下各项权限:
      • 触发器定义的表或视图的SELECT权限。
      • 触发操作 搜索条件中任何表或视图的SELECT权限。
      • 更改开始执行SQL触发器主体语句所需的权限更改结束
  • 如果指定了SECURED选项,则权限集必须包含SECADM权限或CREATE_SECURE_OBJECT权限。
  • 如果指定了 WLM ENVIRONMENT FOR DEBUG MODE 子句,则将调用 RACF® 或外部安全产品来检查在 WLM 环境中定义程序所需的权限。 如果WLM环境访问在 RACF 中受到保护,那么发出ALTER语句的用户必须拥有所需的权限。

根据触发器定义的内容,SYSDUMMYx表可能需要额外的授权。 参见 SYSDUMMYx表

特权集:特权集是指由进程的SQL授权ID所持有的特权集。 指定的触发器名称可以包含模式名称(限定符)。 但是,如果架构名称与进程的授权ID之一不匹配,则必须满足以下条件之一:

  • 特权集包括SYSADM权限、SYSCTRL权限或系统DBADM权限。
  • 该过程的授权ID具有对架构的ALTERIN权限。
备注 :如果将“单独安全”子系统参数设置为“否”,则系统管理员权限将包含SECADM权限。

ALTER TRIGGER语法(高级)

阅读语法图跳过可视化语法图 ALTER TRIGGER 触发器名称 ALTERACTIVE VERSIONVERSION触发器版本IDoption-listREPLACE1ACTIVE VERSIONVERSION触发器版本ID触发器规格ADD VERSION触发器版本ID触发器规格1ACTIVATE VERSION触发器版本IDREGENERATEACTIVE VERSIONVERSION触发器版本IDUSINGAPPLICATION COMPATIBILITY应用兼容性级别DROP VERSION触发器版本ID
注意:
  • 1 在SQL触发器主体中不允许使用带有ADD VERSION或REPLACE子句的ALTER TRIGGER语句。

触发器规格:

阅读语法图跳过可视化语法图扳机启动时间 触发器事件ON table-name视图名称 REFERENCINGOLDROWAS相关名称NEWROWAS相关名称OLD_TABLEAS表标识符NEW_TABLEAS表标识符粒度option-list触发动作

扳机启动时间

阅读语法图跳过可视化语法图 NO CASCADEBEFOREAFTERINSTEAD OF

触发器事件

阅读语法图跳过可视化语法图INSERTDELETEUPDATEOF,列名

粒度

阅读语法图跳过可视化语法图FOR EACH STATEMENTFOR EACH ROW

选项列表 :(选项可以任意顺序排列,但每个选项只能出现一次。)

阅读语法图跳过可视化语法图DISALLOW DEBUG MODEALLOW DEBUG MODEDISABLE DEBUG MODEQUALIFIER模式名称ASUTIME NO LIMITASUTIME LIMIT整数WLM ENVIRONMENT FOR DEBUG MODE名称CURRENT DATA NOCURRENT DATA YESCONCURRENT ACCESS RESOLUTIONUSE CURRENTLY COMMITTEDCONCURRENT ACCESS RESOLUTIONWAIT FOR OUTCOMEDYNAMICRULES RUNDYNAMICRULES BINDAPPLICATION ENCODING SCHEME ASCIIAPPLICATION ENCODING SCHEME EBCDICAPPLICATION ENCODING SCHEME UNICODEWITHOUT EXPLAINWITH EXPLAINWITHOUT IMMEDIATE WRITEWITH IMMEDIATE WRITEISOLATION LEVEL CSISOLATION LEVEL RSISOLATION LEVEL RRISOLATION LEVEL UROPTHINT''OPTHINT常量字符串SQL PATH,模式名称SYSTEM PATHSESSION USERUSERRELEASE AT COMMITRELEASE AT DEALLOCATEROUNDING DEC_ROUND_CEILINGROUNDING DEC_ROUND_DOWNROUNDING DEC_ROUND_FLOORROUNDING DEC_ROUND_HALF_DOWNROUNDING DEC_ROUND_HALF_EVENROUNDING DEC_ROUND_HALF_UPROUNDING DEC_ROUND_UPDATE FORMAT ISODATE FORMAT EURDATE FORMAT USADATE FORMAT JISDATE FORMAT LOCALDECIMAL(15)DECIMAL(31)DECIMAL(15, s)DECIMAL(31, s)TIME FORMAT ISOTIME FORMAT EURTIME FORMAT USATIME FORMAT JISTIME FORMAT LOCAL FOR UPDATE CLAUSE REQUIREDFOR UPDATE CLAUSE OPTIONAL NOT SECUREDSECURED BUSINESS_TIME SENSITIVEYESBUSINESS_TIME SENSITIVENO SYSTEM_TIME SENSITIVEYESSYSTEM_TIME SENSITIVENO ARCHIVE SENSITIVEYESARCHIVE SENSITIVENO APPLCOMPAT应用兼容性级别CONCENTRATE STATEMENTSOFFCONCENTRATE STATEMENTSWITH LITERALS

触发动作

阅读语法图跳过可视化语法图WHEN( 搜索条件)SQL触发器主体

SQL触发器主体

阅读语法图跳过可视化语法图SQL控制语句触发的 SQL 语句

ALTER TRIGGER(高级)描述

触发器名称
识别需要更改的触发器。 名称(包括隐式或显式模式名称)必须在当前服务器上存在。 名称必须指明高级触发器。

触发器不能被混淆。

活动版本或版本触发器-版本-ID
根据是否指定了ALTER、REPLACE或REGENERATE关键字,确定要更改、替换或重新生成的触发器版本。
现行版本
指定更改、替换或重新生成当前激活的触发器版本。
版本触发器版本ID
标识需要更改、替换或重新生成的触发器版本。 trigger-version-id 是定义版本时分配的版本标识符。 trigger-version-id 必须标识当前服务器上存在的指定触发器的版本。
USING APPLICATION COMPATIBILITY 应用兼容性级别
指定用于触发器版本再生的应用程序兼容性级别。 如果现有版本的定义包含需要更高应用程序兼容性的语法、语义或选项,则ALTER语句会返回错误。 当版本最近一次定义或重新生成时,运行的应用程序兼容级别高于 applcompat 级别时,就会出现这种情况。

可以指定下列值:

更改开始VvvRrMmmm更改结束
更改开始

与已识别的 Db2 功能级别的行为兼容。 例如, V12R1M510 指定与最高可用 Db2 12 功能级别的兼容性。 必须激活等效或更高功能级别。

更改开始关于每个应用程序兼容性级别的新功能,请参阅:更改结束

提示: 更改开始为了提高应用程序的兼容性,使用数据服务器客户端或驱动程序访问 Db2 for z/OS® 的应用程序可能需要额外的程序准备步骤。 更多信息,请参阅 “设置数据服务器客户端和驱动程序的兼容性级别 ”。更改结束
更改结束
更改开始V12R1更改结束
更改开始Db2 12 行为兼容,功能级别为500。 此值与指定 V12R1M500 具有相同的效果。更改结束
ALTER
指定触发器需要更改。 当您更改一个或多个触发选项时,任何未明确指定的选项都将使用正在更改的触发器中的现有值。
REPLACE
指定要更换的触发器版本。

当您替换触发器时,以下触发器属性必须与当前激活的触发器版本的相应属性相同: 触发器激活时间触发器事件、表或视图名称以及触发器粒度

引用条款的内容可能与触发器的其他版本有所不同。 对于未明确指定的选项,将使用这些选项的系统默认值,即使这些选项是为要替换的触发器版本明确指定的。 指定禁用调试模式的触发器版本则不在此列。 如果为某个触发器的版本指定了“禁用调试模式”,则无法使用REPLACE子句更改该选项。 更改开始替换触发器定义时,会删除该触发器定义目录中的任何现有注释。更改结束 更改开始触发器的激活顺序不会改变。更改结束

即使触发器主体没有改变,绑定替换后的触发器版本也可能导致新的访问路径。

添加版本触发器版本ID
指定创建新版本触发器。 trigger-version-id 是触发器新版本的版本标识符。 trigger-version-id 不能标识当前服务器上已存在的指定触发器的版本。

当您添加新版本的触发器时,以下触发器属性必须与当前激活的触发器版本的相应属性相同: 触发器激活时间触发器事件、表或视图名称以及触发器粒度。 引用条款的内容可能与触发器的其他版本有所不同。 对于未明确指定的选项,将使用系统默认值。 更改开始触发器的激活顺序不会改变。更改结束

激活版本触发器版本ID
指定当前激活的触发器版本。 触发器版本标识符(trigger-version-id) 是在定义触发器版本时分配的版本标识符。 触发器版本ID 指定的版本是触发器激活时调用的版本。 trigger-version-id 必须标识当前服务器上已经存在的触发器版本。
重新生成
指定触发器包需要重新生成。

ALTER TRIGGER语句中的REGENERATE关键字用于在本地服务器上重新绑定SQL控制语句以及触发器主体中包含的非SQL控制语句。 当触发器被重新生成时,触发器主体中任何不合格的名称都将使用名称解析过程进行解析。

使用带有REGENERATE关键字的ALTER TRIGGER语句与REBIND PACKAGE命令不同。 REBIND PACKAGE命令仅重新绑定非SQL控制语句,以便使用 SYSIBM.SYSPACKSTMTS 目录表中的语句文本为这些语句生成更好的访问路径。

当重新生成触发器定义时,目录中该触发器定义的任何现有注释都不会被删除。

更改开始一般来说,REGENERATE 关键字仅用于特定情况,如例程或对象的隐式再生失败,或 Db2 维护要求对对象或例程进行再生。 有关详细信息,请参阅何时重新生成 Db2 数据库对象和例程更改结束

DROP VERSION 触发器版本 ID
删除触发器版本标识符为trigger-version-id 的触发器版本。 trigger-version-id 是定义版本时分配的版本标识符。 trigger-version-id 必须标识当前服务器上已经存在的触发器版本,而不能标识当前活动的触发器版本。 只有已识别的触发器版本才会被删除。

当当前服务器上只有一个版本的触发器时,使用DROP TRIGGER语句删除触发器。

触发器事件
指定当触发事件应用于主体表或视图时,与触发器关联的触发操作将被执行。
INSERT
指定触发器为插入触发器。 Db2 每当在目标表上进行插入操作时,就会执行触发操作。 但是,如果在任何解释表中定义了插入触发器,并且插入操作是由 Db2 向表中添加一行引起的,则不会执行触发操作。
删除
指定触发器为删除触发器。 Db2 每当对目标表进行删除操作时,就会执行触发操作。
UPDATE
指定触发器为更新触发器。 Db2 每当主题表有更新操作时,就会执行触发操作。

如果您没有指定列名列表,则对目标表任何列(包括随后通过ALTER TABLE语句添加的列)进行的更新操作都会激活触发操作。

列名 ,..
您指定的每个列名必须是主题表的列,且在列表中只能出现一次。 对列出的任何一列进行更新操作,即可激活触发操作。

UPDATE OF 列名不能指定为INSTEAD OF触发器。

更改开始触发激活时间更改结束
更改开始
NO CASCADE
为了与之前的版本和其他产品兼容,不允许使用任何级联。
BEFORE
指定触发器为前触发器。 Db2 在执行触发操作之前,先应用对目标表进行的插入、删除或更新操作所导致的任何更改。 它还规定,触发操作不会激活其他触发器,因为前一个触发器的触发操作不能包含任何更新、REFRESH TABLE或TRUNCATE SQL语句。

view-name 也被指定时,不能指定BEFORE。 对于触发器“之前”,必须为每一行指定“FOR EACH ROW”。

AFTER
指定触发器为后触发器。 Db2 在执行触发操作后,对目标表进行插入、删除或更新操作,并应用由此产生的任何更改。 如果同时指定了视图名称 ,则无需指定AFTER。
INSTEAD OF
指定触发器为,而不是触发器。 关联的触发操作将替换对主体视图的操作。 在给定的主题视图中,每种操作类型只允许使用一个“代替”触发器。 Db2 执行触发操作 ,而不是在主题视图中执行插入、更新或删除操作。

更改开始如果同时指定了表名 ,则不得指定 INSTEAD OF。 INSTEAD OF触发器不能指定WHEN子句。 INSTEAD OF 触发器必须指定 FOR EACH ROW。更改结束

更改结束
REFERENCING
指定转换变量的相关名称和转换表的表名。 对于由触发SQL操作(插入、删除或更新)修改的主题表中的行,关联名称用于标识特定行的列。 表标识符用于识别受影响行的完整集合。 在触发器内部无法引用XML类型的过渡变量。 如果引用了转换表的列,则该列的数据类型不能是XML。

通过使用以下指定的相关名称限定列名,触发 SQL 操作影响的每一行都可用于触发操作:

更改开始OLD ROW AS correlation-name更改结束
更改开始指定相关性名称,该名称用于识别在触发 SQL 操作之前的记录中包含值的过渡变量。更改结束
更改开始新行作为相关性名称更改结束
更改开始指定相关名称,该名称用于标识包含被触发 SQL 操作和已执行的 before 触发器中的任何赋值语句修改的行中值的过渡变量。更改结束

更改开始如果同时指定了 "旧 "和 "新",则对过渡变量的引用必须使用相关的关联名称。更改结束

触发操作所影响的一组完整的行可用作触发操作的过渡表。 指定一个表标识符来引用转换表,如下所示:

OLD_TABLE AS 表标识符
指定临时表的名称,该临时表用于标识在触发SQL操作之前,实际更改之前,完整行集中被修改的行的值。
更改开始NEW_TABLE AS 表标识符更改结束
更改开始指定临时表的名称,该临时表用于标识被触发 SQL 操作和已执行的 before 触发器中的任何赋值语句修改的整套记录中的值。 更改结束

一个触发器只能指定一个 OLD 相关名和一个 NEW 相关名。 一个触发器只能指定一个OLD_TABLE和一个NEW_TABLE 表标识符。 所有相关名称表格标识符必须相互唯一。

表1 总结了您可以为各种触发器类型指定的过渡变量和过渡表的允许组合。 仅当触发事件是删除操作或更新操作时,OLD 关联名 和OLD_TABLE表标识符才有效。 对于删除操作,OLD 关联名称捕获已删除行中列的值,OLD_ TABLE表标识符捕获已删除行集中的值。 对于更新操作,OLD 关联名称捕获更新操作前一行各列的值,OLD_T ABLE表标识符捕获更新操作前一组行的值。

更改开始只有当触发事件是插入操作或更新操作时,NEW 相关名称和 NEW_TABLE 表标识符才有效。 对于这两种操作, 新的关联名称捕获插入或更新行中列的值,而新的表标识符捕获插入或更新行集中的值。 对于 BEFORE 触发器,更新行的值包括 BEFORE 触发器触发操作中任何赋值语句的更改。更改结束

表 1. 触发器定义中允许的属性组合
详细程度 激活时间 触发 SQL 操作 (triggering SQL operation) 允许过渡变量 1 允许使用转换表1
FOR EACH ROW BEFORE 删除 NONE
INSERT 新建 NONE
UPDATE 旧,新 NONE
AFTER 删除 OLD_TABLE
INSERT 新建 NEW_TABLE
UPDATE 旧,新 旧表,新表
INSTEAD OF 删除 OLD_TABLE
INSERT 新建 NEW_TABLE
UPDATE 旧,新 旧表,新表
FOR EACH STATEMENT AFTER 删除 NONE OLD_TABLE
INSERT NONE NEW_TABLE
UPDATE NONE 旧表,新表
注:
  1. 如果引用了不允许引用的转换表或变量,则返回错误。

具有字符数据类型的过渡变量继承主表列的子类型和CCSID。 在触发动作执行期间,转换变量被视为宿主变量。 因此,可能会发生字符转换。 然而,与宿主变量不同,转换变量可以具有位数据属性,并且位数据永远不会发生字符转换。 如果表中的对应列是位数据,则过渡变量被视为位数据。

您不能修改转换表;转换表是只读的。 虽然转换表不会从主题表中继承任何编辑或验证程序, 但它会继承主题表的编码方案和字段程序

每个关联名称和每个表标识符的范围是整个触发器定义。

粒度
每行或每句话
指定 Db2 执行触发操作的条件。
FOR EACH ROW
指定 Db2 对触发SQL操作修改的表中的每一行执行触发操作。 如果触发的SQL操作没有修改任何行,则不会执行触发操作。
FOR EACH STATEMENT
指定 Db2 仅对触发操作执行一次触发操作。 即使触发操作不修改或删除任何行,触发操作也会被执行一次。

对于每个语句,不得指定为“之前”或“代替”触发器。

启用调试模式、禁用调试模式或禁用调试模式
指定此版本的触发器是否可以在调试模式下运行。 默认值由当前调试模式特殊寄存器的值决定。
允许调试方式
指定此版本的触发器可在调试模式下运行。 启用“允许调试模式”时,必须具备WLM环境。 如果您没有指定调试模式的WLM环境, Db2 将使用安装时指定的默认WLM存储过程地址空间。
禁用调试方式
指定此版本的触发器不能在调试模式下运行。 您可以使用ALTER语句将此选项更改为ALLOW DEBUG MODE。 当“禁止调试模式”生效时,必须有一个WLM环境可用。 如果您没有指定调试模式的WLM环境, Db2 将使用安装时指定的默认WLM存储过程地址空间。
禁用调试方式
指定此版本的触发器不能在调试模式下运行。

在创建或更改此版本的触发器以使用“禁用调试模式”后,无法更改此版本的触发器以指定“允许调试模式”或“禁用调试模式”。 要更改此选项,请放下扳机,然后使用所需的选项重新创建。 除了删除并重新创建触发器之外,另一种方法是创建一个使用所需选项的触发器版本,并使其成为活动版本。

当禁用调试模式生效时,调试模式的WLM环境将被忽略。

更改开始QUALIFIER 模式名更改结束
更改开始指定隐式限定符,用于在触发器正文中引用的未限定的对象名称。 有关如何确定该选项的默认值的信息,请参阅未限定的别名、索引、JAR 文件、掩码、权限、序列、表、触发器和视图名称更改结束
ASUTIME
指定每次调用此版本的触发器可以运行的处理器时间总量(以CPU服务单元为单位)。 该值与资源限制规格表的 ASUTIME 列无关。

当您调试触发器时,如果触发器陷入循环,设置限制可能会有所帮助。 有关服务单元的信息,请参阅 z/OS MVS Initialization and Tuning Guide

无限制
规定对服务单元没有限制。

默认值为“无限制”。

极限整数
CPU服务单元的数量限制为1-2147483647之间的正整数。 如果触发器使用的服务单元数量超过指定值, Db2 将取消触发器。 触发器中并行任务所消耗的CPU周期不计入指定的ASUTIME LIMIT。
更改开始用于调试模式的 WLM 环境名称更改结束
更改开始指定 Db2 在调试触发器时使用的 WLM(工作负载管理器)应用环境。 WLM环境名称是一个SQL标识符。

如果您没有指定调试模式的WLM环境, Db2 将使用安装时指定的默认WLM存储过程地址空间。

您必须拥有WLM应用环境的相应权限。

当禁用调试模式时,调试模式下的WLM环境值将被忽略。

更改结束
更改开始当前数据 "是 "或 "当前数据 "否更改结束
更改开始指定在游标稳定性隔离级别生效时,是否要求只读游标和模糊游标使用数据货币。 当前数据还决定着块获取是否可用于分布式、模糊游标。
当前数据 是
指定只读和模糊游标需要数据货币。 Db2 获取页面或行锁以确保数据更新。 对于分布式、模糊游标,块获取将被忽略。
当前数据 无
指定只读和模糊游标不需要数据货币。 对于分布式、模糊游标,允许块获取。 如果触发器试图在打开模糊游标后动态准备并执行DELETE WHERE CURRENT OF语句,则不建议使用CURRENT DATA NO。 如果触发器尝试对以下游标使用DELETE WHERE CURRENT OF语句,则会收到错误:
  • 正在使用块获取的光标
  • 使用并行性查询的游标
  • 放置在由此或另一个应用程序进程修改的行上的游标

当前数据编号为默认值。

更改结束
CONCURRENT ACCESS RESOLUTION
指定处理是否仅使用已提交的数据,还是等待正在更新中的数据的提交或回滚。
WAIT FOR OUTCOME
指定处理将等待正在更新中的数据的提交或回滚。
USE CURRENTLY COMMITTED
指定当遇到正在更新的数据时,处理过程使用当前提交的数据版本。 USE CURRENTLY COMMITTED 适用于访问通用表空间中定义的表的扫描,这些表具有行级或页级锁定大小。

当读取事务和插入事务之间存在锁争用时, USE CURRENTLY COMMITTED 适用于隔离级别为CS或RS的扫描。 适用的扫描包括针对只读和模糊查询以及可更新游标的意向读取扫描。 USE CURRENTLY COMMITTED 也适用于从UPDATE或DELETE语句的WHERE子句和INSERT语句的子选择中启动的扫描。

当读事务和删除事务之间存在锁争用时, USE CURRENTLY COMMITTED 适用于隔离级别为CS且指定了CURRENT DATA NO的扫描。

更改开始动态规则更改结束
更改开始指定运行时适用于以下动态 SQL 属性的值:
  • 用于检查授权的授权标识
  • 用于不合格对象的限定符
  • Db2 用于解析和语义验证动态SQL语句的应用程序编程选项的源文件

在触发器中,DYNAMICRULES还指定动态SQL语句是否可以包含ALTER、CREATE和DROP语句。

除了DYNAMICRULES条款的价值外,触发器的运行时环境还控制着动态SQL语句在运行时的行为。 DYNAMICRULES值和运行环境共同决定了动态SQL属性的值。 该组属性值被称为动态 SQL 语句行为。 可以指定下列值:
运行
指定动态 SQL 语句将使用运行行为进行处理。

默认值为“运行”。

BIND
指定动态 SQL 语句将使用绑定行为进行处理。
有关这些选项的影响,请参阅授权ID和动态SQL
更改结束
更改开始应用编码方案更改结束
更改开始指定触发器正文中静态 SQL 语句中 SQL 变量的默认编码方案。 如果CCSID子句未指定为数据类型的一部分,则该值用于在复合语句中定义SQL变量。
ASCII
指定使用服务器的ASCII CCSID对数据进行编码。
EBCDIC
指定使用服务器的EBCDIC CCSID对数据进行编码。
UNICODE
指定使用服务器的Unicode CCSID对数据进行编码。

有关如何确定此选项的默认值的信息,请参阅编码绑定选项

更改结束
更改开始带解释或不带解释更改结束
更改开始指定是否提供有关触发器中 SQL 语句执行方式的信息。
无需解释
指定不显示触发器中SQL语句的执行方式。

如果语句嵌入在触发器中,而触发器又使用不带EXPLAIN指定,则可以通过在触发器主体中嵌入SQL语句EXPLAIN来获得该语句的EXPLAIN输出。 否则,EXPLAIN选项适用于触发器主体中所有可解释的SQL语句,以及任何DECLARE CURSOR语句的fullselect部分。

默认值为“无解释”。

附带解释
指定提供有关触发器中的SQL语句如何执行的信息。 信息被插入到表格所有者中。 PLAN_TABLE。 owner 是触发器所有者的授权ID。 或者,触发器所有者的授权ID可以有一个别名, 例如owner.PLAN_TABLE ,指向基础表PLAN_TABLE。 所有者还必须对该表拥有适当的 SELECT 和 INSERT 权限。 PLAN_TABLE必须有一个基本表,可以有多个别名,表名相同,但结构限定符不同。 更改开始它不能是视图或同义词,并且应在处理 CREATE 语句之前就存在。更改结束 在所有对 owner.PLAN_TABLE 的插入中,QUERYNO 的值是 分配的语句编号。 Db2

如果存在DSN_STATEMNT_TABLE和DSN_FUNCTION_TABLE两个可选表,则WITH EXPLAIN选项也会填充这两个表。 DSN_STATEMNT_TABLE包含SQL语句的处理成本估算。 更多信息,请参阅 《估算 SQL 语句的成本 》。 DSN_FUNCTION_TABLE包含有关函数解析的信息。 更多信息请参阅 《检查 Db2 如何使用 DSN_FUNCTION_TABLE 解析函数 》。

有关 EXPLAIN 语句的更多信息,包括 WITH EXPLAIN 选项填充的表的说明,请参阅 EXPLAIN 语句

更改结束
更改开始有即时写入功能或无即时写入功能更改结束
更改开始指定是否立即写入对分组缓冲池相关页面集或分区的更新。 此选项仅适用于数据共享环境。 即时写入子系统参数不影响此选项。 即时写入绑定选项显示了即时写入绑定选项(与该触发选项类似)的隐含层次结构,因为它会影响运行时间。
无需立即撰写
指定执行正常的写入活动。 依赖于组缓冲池的更新页面在提交的第一阶段或之前写入,或者对于已回滚的事务,在中止结束时写入。

默认值为“不立即写入”。

立即写
指定一旦缓冲区更新完成,立即写入依赖于组缓冲池的更新页面。 即使缓冲区在事务处理前进或回滚期间更新,更新的页面也会立即写入。 立即写入可能会影响性能。
更改结束
更改开始隔离等级 RR、RS、CS 或 UR更改结束
更改开始指定触发器与其他运行中应用程序的隔离程度。 如需了解隔音等级,请参阅 “选择隔音选项 ”。
RR
指定可重复读取。
RS
指定读取稳定性。
CS
指定光标稳定性。 CS是默认设置。
UR
指定未承诺的阅读。
更改结束
更改开始OPTHINT 字符串常数更改结束
更改开始指定是否对包含在触发器正文中的静态 SQL 语句使用查询优化提示。

字符串常量是一个长度不超过128字节的字符串,当 Db2 子系统在PLAN_TABLE中搜索行作为输入时使用。 默认值为空字符串,表示 Db2 子系统不对静态SQL语句使用优化提示。

优化提示仅在您的系统启用了优化提示时可用。 请参阅 “准备影响访问路径 ”,了解启用优化提示的相关信息。

更改结束
SQL 路径
指定 Db2 用于解析触发器正文中未限定用户定义的类型、函数和过程名称的SQL路径。 默认值为 “SYSIBM”、“SYSFUN”、“SYSPROC”、“SYSIBMADM ”和QUALIFIER选项的值。

无需明确指定 “SYSIBM”、“SYSFUN”、“SYSPROC”、“SYSIBMADM” 等架构。 如果这些模式中未明确指定任何模式,则会在SQL路径的开头按列出的顺序隐式假设。

Db2 通过以下方式计算长度:取指定的每个模式名称 ,删除其末尾的空白,在其前后添加两个分隔符,并在每个模式名称后添加一个逗号,最后一个除外。 生成的字符串长度不能超过当前模式特殊寄存器的长度。 如果您没有指定 “SYSIBM”、“SYSFUN”、“SYSPROC”、“SYSIBMADM ”模式,它们将不会包含在SQL路径的长度中。 如果SQL路径的总长度超过了CURRENT PATH特殊寄存器的长度, Db2 将返回错误。

有关更多信息,请参阅:

schema-name
标识模式。 Db2 在处理ALTER语句时,不会验证模式是否存在。 同一个模式名称不应在模式名称列表中出现两次以上。

SYSPUBLIC不能指定为SQL路径。

系统 PATH
指定架构名称 “SYSIBM”、“SYSFUN”、“SYSPROC”、“SYSIBMADM ”。
SESSION_USER或USER
指定SESSION_USER或USER特殊寄存器的值,该值表示一个最多8字节(EBCDIC) 的架构名称。 在处理ALTER语句时,该长度将包含在为SQL PATH选项指定的模式名称列表的总长度中。

更改开始如果在模式名称列表中指定 SESSION_USER(或 USER),请不要在 SESSION_USER(或 USER)关键字周围使用分隔符。更改结束

更改开始发布于更改结束
更改开始指定何时释放触发器使用的资源:在每个提交点或触发器终止时。
COMMIT
指定在每个提交点释放资源。

COMMIT是默认值。

DEALLOCATE
指定资源仅在线程终止时释放。 DEALLOCATE对动态SQL语句没有影响,后者总是使用RELEASE AT COMMIT,但以下情况例外:当您使用RELEASE AT DEALLOCATE子句和WITH KEEP DYNAMIC子句时,且子系统在安装面板 DSNTIP8 上为CACHE DYNAMIC SQL字段安装了值为YES的值,则RELEASE AT DEALLOCATE选项适用于动态SELECT和数据更改语句。

在以下任一事件发生时,为动态陈述而购买的锁将被收回:

  • 应用程序进程结束。
  • 申请流程会生成一份带有相同声明标识符的PREPARE声明。 (在下一个提交点解锁)。
  • 由于语句未被使用,因此从动态语句缓存中移除。 (在下一个提交点解锁。)
  • 声明所依赖的对象被删除或更改,或者声明所需的特权被撤销。 (在下一个提交点解锁。)

释放 AT DEALLOCATE 可能会增加软件包或计划的大小,因为附加项目会驻留在软件包或计划中。

更多信息,请参阅选择发布选项

更改结束
更改开始四舍五入更改结束
更改开始指定操作 DECFLOAT 数据的四舍五入模式。 默认值来自应用程序编程默认模块中的默认十进制浮点舍入模式。
圆形天花板
指定数字取整为正无穷大。
四舍五入
指定数字四舍五入到0(截断)。
圆地板
指定数字舍入为负无穷大。
Dec_round_half_down
指定数字四舍五入取整;如果等距,则向下取整。
十进制半双
指定数字四舍五入取整;如果等距,则四舍五入使最后一位数字为偶数。
十进制半上
指定数字四舍五入取整;如果等距,则向上取整。
四舍五入
指定数字舍入到0以外。
更改结束
更改开始日期格式 ISO、EUR、USA、JIS 或 LOCAL更改结束
更改开始为以字符串形式表示日期或时间值的结果值指定日期格式。 更多信息请参见日期时间值的字符串表示

默认格式在定义例程的系统安装面板 DSNTIP4 的日期格式字段中指定。 除非您有日期退出程序,否则无法使用“本地”选项。

更改结束
更改开始DECIMAL(15)、DECIMAL(31)、DECIMAL(15, s ) 或 DECIMAL(31, s )更改结束
更改开始指定十进制算术运算的最大精度。 更多信息请参阅 《算术:两个小数运算数 》。 默认格式在定义例程的系统安装面板 DSNTIPF 的 DECIMAL ARITHMETIC 字段中指定。 如果指定了 pp. s 形式, 则 s 必须是 1-9 范围内的数字。s 表示用于除法的最小比例。更改结束
更改开始时间格式 ISO、EUR、USA、JIS 或 LOCAL更改结束
更改开始为以字符串形式表示日期或时间值的结果值指定时间格式。 更多信息请参见日期时间值的字符串表示

默认格式在定义例程的系统安装面板 DSNTIP4 的“时间格式”字段中指定。 除非您有日期退出程序,否则无法使用“本地”选项。

更改结束
更改开始FOR UPDATE CLAUSE OPTIONAL 或 FOR UPDATE CLAUSE REQUIRED更改结束
更改开始如果游标用于执行定位更新,则指定 DECLARE CURSOR 语句是否需要 FOR UPDATE 子句。
需要更新条款
规定如果游标将用于定位更新,则必须将FOR UPDATE子句作为游标定义的一部分。

默认情况下,需要更新条款。

更新条款可选
指定在定位更新中使用游标时,无需指定 FOR UPDATE 子句。 触发器主体可以包含定位UPDATE语句,用于更新用户有权限更新的列。
不带列列表的FOR UPDATE子句适用于静态或动态SQL语句。 即使不使用该子句,也可以指定带有列列表的 FOR UPDATE OF,以限制只对 FOR UPDATE 子句中标识的列进行更新,并指定更新锁的获取。更改结束
SECURED 或者 NOT SECURED
指定触发器是否安全。 在“安全”和“不安全”之间切换触发器会导致触发器包的隐式重新绑定。 如果在触发器包的隐式重新绑定过程中遇到错误,ALTER TRIGGER语句将返回错误。
SECURED
指定触发器被视为安全触发器。

如果触发器的目标表使用行访问控制或列访问控制,则必须指定SECURED。 如果为视图创建的触发器,且视图定义中一个或多个基础表使用行访问控制或列访问控制,则必须指定SECURED。

NOT SECURED
指定触发器被认为不安全。

对于使用行访问控制或列访问控制的触发器,不能指定NOT SECURED。 如果视图定义中有一个或多个基础表使用行访问控制或列访问控制,则不能为视图创建的触发器指定NOT SECURED。

更改开始业务时间敏感更改结束
更改开始决定静态和动态 SQL 语句中对应用周期时态表的引用是否受 CURRENT TEMPORAL BUSINESS_TIME 特殊寄存器值的影响。
对申请期间临时表的引用受当前临时业务时间特殊寄存器的值的影响。 缺省值是 YES。
对申请期间临时表的引用不受当前临时业务时间特殊寄存器的值的影响。

更多信息,请参阅当前时间业务时间特别登记册

更改结束
更改开始SYSTEM_TIME SENSITIVE更改结束
更改开始确定静态和动态 SQL 语句中对系统周期时态表的引用是否受 CURRENT TEMPORAL SYSTEM_TIME 特殊寄存器值的影响。
对系统周期时态表的引用会受CURRENT TEMPORAL SYSTEM_TIME专用寄存器的值影响。 缺省值是 YES。
对系统周期时态表的引用不会受CURRENT TEMPORAL SYSTEM_TIME专用寄存器的值影响。

更多信息,请参阅当前时间系统_时间特殊寄存器

更改结束
更改开始档案敏感更改结束
更改开始确定 SQL 语句中对启用存档的表的引用是否受 SYSIBMADM.GET_ARCHIVE 内置全局变量值的影响。
对启用存档的表的引用受 SYSIBMADM.GET_ARCHIVE 内置全局变量值的影响。 缺省值是 YES。
对启用存档的表的引用不受 SYSIBMADM.GET_ARCHIVE 内置全局变量值的影响。

相关信息请参阅 GET_ARCHIVE内置全局变量

更改结束
APPLCOMPAT
指定触发器正文中静态 SQL 语句的应用兼容性级别行为。 可以指定以下 Db2 函数级别值:
更改开始VvvRrMmmm更改结束
更改开始

与已识别的 Db2 功能级别的行为兼容。 例如, V12R1M510 指定与最高可用 Db2 12 功能级别的兼容性。 必须激活等效或更高功能级别。

更改开始有关每个应用程序兼容性级别的新功能,请参阅:更改结束

提示: 更改开始对于使用数据服务器客户端或驱动程序访问 Db2 for z/OS 的应用程序,可能需要额外的程序准备步骤来提高应用程序兼容性级别。 有关详细信息,请参阅为数据服务器客户端和驱动程序设置应用程序兼容性级别更改结束
更改结束
更改开始V12R1更改结束
更改开始Db2 12 功能 500 级的行为兼容。 该值与指定 V12R1M500 的结果相同。更改结束

触发器不支持与之前的 Db2 版本兼容的 V11R1 和 V10R1 等值。

更改开始浓缩语句或浓缩语句中的词汇更改结束
更改开始指定是否将指定字面常量的动态 SQL 语句作为单独的唯一语句条目缓存到动态语句缓存中,而不是共享缓存中的现有语句。 如果新语句满足共享同一动态语句缓存版本的所有条件,则动态SQL语句可以共享缓存中的现有语句,但新语句指定了一个或多个与缓存语句不同的字面常量。
集中陈述 OFF
指定动态 SQL 语句中指定的文字常量将被缓存为唯一语句条目,如果它指定了一个或多个与同一动态语句的缓存版本不同的常量。 集中式语句 OFF 是默认的动态语句缓存行为。
用文字浓缩语句
指定动态 SQL 语句中指定的文字常量将共享同一动态语句的缓存版本,如果新的动态语句满足共享缓存语句的所有条件,并且指定的常量可以代替缓存语句中的常量,则该动态语句也将使用 CONCENTRATE STATEMENTS WITH LITERALS 选项进行准备。
更改结束
触发动作
指定触发器激活时执行的操作。 触发操作由一个或多个SQL语句和一个可选条件组成,该条件用于控制语句是否被执行。
WHEN (搜索条件
指定一个条件,其值为真、假或未知。 只有当搜索条件为真时,才会执行触发的SQL语句。 如果省略了WHEN子句,则始终执行关联的SQL语句。

INSTEAD OF触发器不能指定WHEN子句。

SQL触发器主体
更改开始指定触发操作要执行的单个 SQL 控制语句 (包括复合语句)或触发的 SQL 语句。 有关定义 SQL 触发器的更多信息,请参阅 SQL 过程语言 (SQL PL)更改结束
更改开始SQL 控制语句更改结束
更改开始指定 SQL 控制语句,其中可包括嵌套控制语句和 SQL-Procedure-statement (SQL PL) 语法图中指定的其他 SQL 语句。 可为 SQL-procedure-statement 指定的语句受触发器相关语法说明的限制。更改结束
触发的 SQL 语句

指定一个SQL语句,该语句是触发器主体中唯一的语句。

.

SQL触发器主体中只能指定某些SQL语句。

更改开始触发器主体不得包含不受支持的语句。更改结束

  • 触发器主体中的语句不得引用宿主变量、未定义的转换变量或已声明的临时表。
  • 触发器主体中的语句只能引用当前服务器上的表或视图。
  • 更改开始触发器主体中的语句只能调用当前服务器上的存储过程或用户定义的函数。 不过,被调用的例程可以访问当前服务器以外的服务器。更改结束
  • 更改开始触发器正文中的语句不得修改属于 BUSINESS_TIME 期间的列。更改结束
  • 触发器主体不得直接或间接为包含以下语句之一的程序发出CALL语句:
    • COMMIT
    • CONNECT
    • 释放连接
    • 更改开始RELEASE SAVEPOINT更改结束
    • 回滚(不保存到保存点)
    • 更改开始SAVEPOINT更改结束
    • SET CONNECTION
  • 触发器主体不得直接或间接为使用COMMIT ON RETURN选项定义的程序发出CALL语句。
  • 如果触发条件是先于触发条件:
    • 更改开始触发器主体不得包含 DELETE、INSERT、MERGE、REFRESH TABLE、TRUNCATE、UPDATE 语句或 SELECT FROM 数据更改语句。更改结束
    • 更改开始触发器主体不得直接或间接调用包含以下语句之一的例程:
      • ALTER
      • COMMENT
      • 创建
      • DECLARE GLOBAL TEMPORARY TABLE
      • 删除
      • DROP
      • EXCHANGE
      • GRANT
      • INSERT
      • 标签
      • LOCK TABLE
      • MERGE
      • REFRESH TABLE
      • RENAME
      • REVOKE
      • TRUNCATE
      • UPDATE
      更改结束

CREATE TRIGGER 语句(或 ALTER TRIGGER 语句)不能包含十六进制图形字符串(GX)常量。

触发的操作可以参考受影响行集中的值。 通过使用过渡变量和过渡表来支持这一操作。

当触发器创建或触发器版本定义时, 触发器中引用的所有表、视图、别名、序列、角色、用户定义的数据类型、用户定义的函数和过程必须在当前服务器上存在。 创建触发器或定义触发器版本时,别名所引用的表或视图也必须存在。

ALTER TRIGGER(高级)的注意事项

切换到高级触发器:
您不能使用ALTER TRIGGER语句将基本触发器更改为高级触发器。 您可以使用DROP语句删除要更改的现有触发器,然后使用CREATE TRIGGER语句在 Db2 12 中创建一个具有类似定义的高级触发器,并启用新功能,或者您可以使用CREATE TRIGGER语句和OR REPLACE子句。 或者,您可以使用不同的模式创建高级触发器。 要定义高级触发器,请在CREATE TRIGGER语句中省略MODE DB2SQL 子句。
变化立竿见影:
ALTER TRIGGER语句对触发器定义所做的任何更改都会立即生效。 下次触发器被激活时,将使用更改后的定义。
识别码解析:
有关如何在触发器主体中将名称解析为列、SQL变量、转换变量或全局变量的信息,请参阅 SQL过程语言(SQL PL )。

如果列、SQL 变量、转换变量或全局变量使用了非唯一名称,则使用列的表标识符、SQL 变量的标签名称、转换变量的相关名称和全局变量的架构来限定非唯一名称。

过渡变量和过渡表:
触发的操作可以参考受影响行集中的值。 通过使用过渡变量和过渡表来支持这一操作。

过渡变量与触发器所定义的表中的相应列具有相同的名称和数据类型,并且可以为空。 过渡变量包含受影响行中某一列的值。 转换变量由关联名称限定,该名称用于标识引用的是旧值(更新前)还是新值(更新后)。 在触发器主体的查询条件或 SQL 语句中,如果引用在触发器主体之外,则允许在表格中引用过渡变量。 在更新或插入触发器中,可以为新的过渡变量赋值。 更新行的值包括从任何赋值到触发前触发动作中的过渡变量的变化。

转换表包含受影响行的完整集合,包括旧值(更新前)或新值(更新后)。 转换表是只读的,可以在触发器动作之后或代替触发器引用。 转换表也使用源表的列名,但有一个关联的表标识符,可将受影响行的完整集合视为一个表。 可以为新旧过渡表指定单独的表标识符。 在触发条件中,或在触发器主体的 SQL 语句中,如果变量允许在触发器主体之外引用,则可以在触发操作中引用转换表。 此外,可以将转换表作为参数传递给用户定义的函数或过程,在转换表的表标识符前指定TABLE关键字。 当调用函数或过程时,会传递一个用于转换表的表定位符。

将触发器从“未锁定”改为“已锁定”:
通常,安全管理员会检查触发器访问的数据,确保其安全,并向触发器所有者授予CREATE_SECURE_OBJECT权限。 将触发器更改为“SECURED”后,安全管理员将撤销触发器所有者对“CREATE_SECURE_OBJECT”的权限。

在执行ALTER TRIGGER语句后,触发器被视为安全。 Db2 将SECURED属性视为一个断言,声明用户已为触发器主体中的所有活动建立了审计程序。 如果安全触发器引用了用户定义的函数,则 Db2 会认为这些函数无需验证即可安全使用。 如果这些功能可以访问敏感数据,那么拥有SECADM权限的用户需要确保这些功能被允许访问这些数据,并且这些功能的所有版本都经过审计,所有后续的ALTER FUNCTION语句或对外部包的更改都经过审计流程的审查。

如果触发器的目标表使用行访问控制或列访问控制,则触发器必须安全。 如果为视图创建的触发器,且视图定义中一个或多个基础表使用行访问控制或列访问控制,则必须指定SECURED。

将触发器从“安全”改为“不安全”:
如果触发器的目标表使用行访问控制或列访问控制,或者触发器用于视图,且视图定义中的一个或多个基础表使用行访问控制或列访问控制,则ALTER TRIGGER语句将返回错误。
更改开始更改混淆触发器:更改结束
更改开始混淆触发器不能以任何方式更改。更改结束
行访问控制和列访问控制不适用于过渡变量和过渡表:
如果对触发器的目标表实施了行访问控制或列访问控制,则行权限和列掩码不适用于转换变量和转换表的初始值。 触发表的行访问控制和列访问控制是强制性的,但对于在触发器主体中引用的过渡变量和过渡表,或者作为参数传递给在触发器主体中调用的用户定义函数,则忽略这些变量和表。 为了确保在触发器操作中访问过渡变量和过渡表中的敏感数据的SQL语句不存在安全问题,必须更改触发器以使用SECURED选项。 如果触发器不安全,则无法对触发表实施行访问控制和列访问控制。
触发选项与绑定选项的对应关系
下表列出了CREATE TRIGGER和ALTER TRIGGER的选项,以及绑定命令的相应选项。 请参阅套餐、计划和服务中的装订和重新装订选项 ,了解装订选项效果的更多信息。
表 2. 触发选项与绑定选项的对应关系
CREATE TRIGGER(高级)或ALTER TRIGGER(高级)选项 绑定命令选项
APPLCOMPAT APPLCOMPAT( V12R1 )
应用编码方案
编码(ASCII)
编码(EBCDIC)
编码(UNICODE)
档案 敏感
档案敏感(是)
档案敏感(否)
业务时间敏感
胸围敏感(是)
胸围敏感(否)
当前数据
currentdata(no)
currentdata(yes)
更改开始

的浓缩语句
的浓缩语句,带文字
更改结束
更改开始

concentratestmt(有)
更改结束
并发访问权解析
并发访问解决(当前提交)
并发访问解决(等待结果)
动态规则
动态规则(绑定)
动态规则(运行)
ISOLATION LEVEL
隔离(RR)
隔离(RS)
隔离(CS)
隔离(UR)
OPTHINT OPTHINT
QUALIFIER QUALIFIER
RELEASE
release(commit)
release(deallocate)
四舍五入
四舍五入(向上取整)
四舍五入(向下取整)
四舍五入(向下取整)
四舍五入(向下取整)
四舍五入(向下取整)
四舍五入(向下取整)
四舍五入(向上取整)
SQL 路径 路径
系统时间敏感
系统时间敏感(是)
系统时间敏感(否)
有解释或无解释
解释(是)
解释(否)
无论是否立即写入
立即发送(是)
立即发送(否)
套餐注意事项:
当触发器的某些属性发生变化时,触发器的主体可能会反弹或再生。 但是,现有软件包不会受到影响,不会导致触发器激活,也不会失效。 触发器主体的隐式重新绑定或再生无需额外的绑定相关权限。

如果在隐式重新绑定期间遇到错误,ALTER TRIGGER语句将失败并返回错误。

当执行一个触发包时,会激活另一个触发包,即反弹或再生触发包。

表3 总结了当特定选项更改时,隐式重新绑定和重新生成的时间。 如果触发器选项发生改变,则连续出现Y值表明将发生重新绑定或重新生成。

表 3. ALTER TRIGGER(高级)选项,更改后会导致重新绑定或重新生成
ALTER TRIGGER(高级)选项 更改结果会导致触发器主体的非控制语句被重新绑定 变化的结果是触发器的整个主体的隐式再生?
启用调试模式、禁用调试模式或禁用调试模式 Y2 Y
APPLCOMPAT N N
应用编码方案 Y Y
档案是否敏感 Y Y
ASUTIME N N
业务时间敏感度:是或否 Y Y
集中陈述 OFF 或 WITH LITERALS Y N
并发访问权解析 Y N
当前数据 Y N
DATE FORMAT Y Y
DECIMAL Y Y
动态规则 绑定或运行 Y N
可选更新条款或必填更新条款 Y N
ISOLATION LEVEL Y N
OPTHINT Y N
QUALIFIER Y N
RELEASE Y N
四舍五入 Y Y
有担保或无担保 Y N
SQL 路径 Y Y
系统时间敏感 Y Y
时间格式 Y Y
有解释或无解释 Y N
立即写入或不立即写入 Y N
调试模式的WLM环境 N N
注:
  1. 当触发器正文中的非控制语句发生隐式重新绑定时,不会重新评估限定符和SQL路径选项。
  2. 如果将“允许调试模式”的值更改为“禁止调试模式”,触发器包将重新生成。
触发对象的应用兼容性级别注意事项
应用程序兼容性级别控制着新功能和增强功能的采用和使用。 当一个对象被创建或修改时,会使用两个单独的应用程序兼容级别:一个用于处理对象的定义,另一个用于处理对象正文中的SQL语句:
对象定义

当前应用程序兼容性特殊寄存器值用于处理对象定义,但对象主体中的语句除外

此应用程序兼容性级别存储在 SYSENVIRONMENT.APPLCOMPAT 列中。 您可以在对象的目录定义中使用环境ID值来定位具有匹配ENVID值的SYSENVIRONMENT行。

当对象被重新生成时,应用程序兼容性级别可以更改。

物体主体中的语句

CREATE或ALTER语句的APPLCOMPAT选项隐式或显式指定的应用程序兼容性级别用于处理对象主体中的语句。

此应用程序兼容性级别存储在与对象定义关联的软件包的 SYSPACKAGE.APPLCOMPAT 列中。

使用比当前定义更低的兼容性级别来修改触发器定义
如果当前应用程序兼容性特殊寄存器值低于现有对象定义的应用程序兼容性级别,则即使ALTER语句的内容在当前级别有效,更改对象也可能导致错误。 当现有对象定义包含的功能需要比“当前应用程序兼容性”特殊寄存器设置更高的级别时,就会出现错误。
触发对象再生的应用程序兼容性级别

对于重新生成对象的ALTER语句,使用REGENERATE关键字后面的USING APPLICATION COMPATIBILITY子句隐式或显式指定的应用程序兼容性设置重新处理对象定义。 此应用程序兼容性值将替换与对象定义关联的环境设置中 SYSENVIRONMENT.APPLCOMPAT 列中的现有值。

如果未指定“应用程序兼容性”条款,则使用对象定义中 SYSENVIRONMENT.APPLCOMPAT 列中现有的应用程序兼容性值来重新处理与对象定义相关的文本。

语句在正文中的行为仍然受对象现有APPLCOMPAT选项的值控制。

SYSENVIRONMENTS目录表的注意事项:
ALTER语句指定新的环境设置,将导致在SYSENVIRONMENTS目录表中添加新的一行。 即使随后在处理ALTER语句时遇到错误,也会添加新行。 因此,即使ALTER语句失败,也可能添加新的SYSENVIRONMENTS行。
从属对象:
触发器取决于触发表和触发器主体中引用的对象。
触发器中的错误处理:
触发器可能会像其他SQL语句一样返回错误。 应用程序应意识到触发器调用时可能出现的错误。 任何未在触发器主体内处理的异常SQLSTATE(使用处理程序),都会导致异常SQLSTATE返回到导致触发器激活的语句。 例如,如果一个SIGNAL语句(RESIGNAL语句或RAISE_ERROR函数) 在SQL触发器主体中引发了一个非严重错误,且该条件未在触发器主体中处理,则将返回SQLCODE -438和指定的SQLSTATE。 其他非严重错误会返回SQLCODE -723和SQLSTATE 09000。 在执行触发式SQL语句时出现的严重错误将返回SQLCODE -901、-906、-911和-913以及相应的SQLSTATE。 不返回警告。

ALTER TRIGGER(高级)示例

示例1:将触发器 TRIGGER1 的定义更改为“安全”
ALTER TRIGGER TRIGGER1
 SECURED;
示例2:修改触发器 TRIGGER1 的定义,使其能够在调试模式下运行
ALTER TRIGGER TRIGGER1
 ALTER ALLOW DEBUG MODE;
示例3:使用ACTIVATE VERSION子句,使触发器的新版本成为当前活动的版本
ALTER TRIGGER TRIGGER1
ACTIVATE VERSION V3;
示例4:更新当前激活的触发器版本
ALTER TRIGGER TRIGGER1
REGENERATE ACTIVE VERSION;
更改结束