ALTER PROCEDURE 语句(SQL - 本机过程)
ALTER PROCEDURE语句用于更改当前服务器上SQL程序的定义。 可以使用ALTER PROCEDURE语句更改过程选项、参数名称和例程主体,并定义和维护过程的其他版本。
有关原生 SQL 程序中支持的 SQL 控制语句的信息,请参阅 SQL 过程语言 (SQL PL )。
调用ALTER PROCEDURE(SQL - 本地)
只有在动态规则运行行为生效时,才能动态准备。 更多信息,请参阅授权ID和动态SQL。
ALTER PROCEDURE(SQL - 原生)授权
以下定义的特权套装必须至少包含以下一项:
- 程序的所有权
- 架构上的ALTERIN权限
- 系统 DBADM
- SYSCTRL 权限
- SYSADM
安装 SYSOPR 权限(当前进程的 SQLID 设置为 SYSINSTL 时)
与模式名称匹配的授权ID隐式拥有该模式的ALTERIN权限。
如果用于更改过程的授权ID具有安装SYSADM权限或安装SYSOPR权限,并且当前SQLID设置为SYSINSTL,则在重新评估过程定义时,该过程将被识别为系统定义的过程。
在以下情况下,可能需要额外特权:
- 如果指定了 SQL-routine-body ,则权限集必须包括执行 SQL-routine-body 中语句所需的权限。
- 如果引用用户定义类型作为参数的数据类型,则权限集还必须包括以下至少一种权限或授权:
- 用户自定义类型的所有权
- 用户自定义类型的使用权限
- 系统 DBADM 权限
- DATAACCESS 权限
- SYSADM 权限
- 如果该过程使用表作为参数,则权限集还必须至少包含以下权限之一:
- 对表的所有权
- 表中的 SELECT 权限
- DATAACCESS 权限
- SYSADM 权限
- 如果您指定了 WLM ENVIRONMENT FOR DEBUG MODE 子句,则将调用 RACF® 或外部安全产品来检查在 WLM 环境中定义程序所需的权限。 如果WLM环境访问在 RACF 中受到保护,则权限集必须包含所需的权限。 更多信息,请参阅 《WLM环境中创建存储过程的授权管理 》。
- 在定义存储过程的新版本(使用 ADD VERSION 子句)或替换现有版本(使用 REPLACE VERSION 子句)时,权限集必须包括添加新软件包或现有软件包的新版本所需的授权,具体取决于安装面板 DSNTIPP 上 BIND NEW PACKAGE 字段的值,或者权限集必须包括 SYSADM、SYSCTRL 或系统 DBADM 授权。 存储过程包的所有者必须拥有执行 SQL 程序体中语句所需的权限。
根据程序定义的内容 ,SYSDUMMYx表可能需要额外的授权。 参见 SYSDUMMYx表。
权限设置:
如果语句嵌入到应用程序中,权限集就是软件包所有者所拥有的权限。
- 特权集包括系统管理员权限
- 特权集包括SYSCTRL权限
- 该进程的SQL授权ID具有对模式进行ALTERIN操作的权限
在具有 ROLE AS OBJECT OWNER 子句的受信任上下文中发布 ALTER PROCEDURE 时,包所有者的确定方法如下:- 如果没有指定“包裹所有者”选项,则与活页夹关联的角色将成为包裹所有者。
- 如果指定了“包所有者”选项,则“包所有者”选项中指定的角色将成为包所有者。 在可信的环境中,指定的“包裹所有者”必须是一个角色。

ALTER PROCEDURE(SQL - 原生)语法
常规规格:
参数声明:
数据类型:
内置类型:
选项列表 :(选项可以任意排序,但每个选项只能出现一次。)
SQL-routine-body:
ALTER PROCEDURE(SQL - 原生)描述
- 程序名
- 确定更改步骤。 在程序名称中指定的程序必须在当前服务器上存在。
程序不得混淆。
- 活动版本或所有版本或版本常规版本ID
- 根据是否指定了ALTER、REPLACE或REGENERATE关键字,标识要更改、替换或重新生成的程序版本。重要提示: 请勿通过指定 VERSION 关键字来创建 Db2 附带程序的附加版本。 仅支持 Db2 提供的版本。 此类例程的其他版本会导致所提供例程的安装和配置失败。
- 现行版本
- 指定更改、替换或重新生成当前活动的程序版本。
默认值为 ACTIVE VERSION。
- 所有版本
- 指定更改该程序的所有版本。 当指定此选项时,只能更改以下选项:
- 自主或承诺返回
- 版本号 routine-version-id
- 标识要更改、替换或重新生成的程序版本。 routine-version-id 是定义版本时分配的版本标识符。 routine-version-id 必须标识当前服务器上存在的指定过程的版本。
- ALTER
- 指定要更改程序的版本。
当您更改一个程序以添加或替换该程序的某个版本时,任何未明确指定的选项都将使用正在更改的程序版本的现有值。
- REPLACE
- 指定要替换的程序版本。
绑定替换后的版本可能会导致新的访问路径,即使例程主体没有改变。
当您替换一个过程时,参数的数据类型、CCSID 规格和字符数据属性(FOR BIT/SBCS/MIXED DATA)必须与当前活动版本中相应参数的属性相同。 对于未明确指定的选项,将使用这些选项的系统默认值,即使这些选项是为被替换的程序版本明确指定的。 指定禁用调试模式的程序版本则不在此列。 如果为某个版本的程序指定了“禁用调试模式”,则无法通过REPLACE子句进行更改。
程序定义被替换后,目录中该程序定义的任何现有注释都会被删除。
- 添加版本号 routine-version-id
- 指定创建新版本的程序。 routine-version-id 是新版本的程序版本标识符。 routine-version-id 不能标识当前服务器上已存在的指定过程的版本。
当您添加新版本的程序时,参数的数据类型、CCSID 规格和字符数据属性(FOR BIT/SBCS/MIXED DATA)必须与当前活动版本程序中相应参数的属性相同。 参数名称可能与该过程的其他版本有所不同。 对于未明确指定的选项,将使用系统默认值。
- 激活版本 常规版本 ID
- 指定当前正在运行的程序版本。 routine-version-id 是定义过程版本时分配的版本标识符。 除非在调用过程时,CURRENT ROUTINE VERSION特殊寄存器的值覆盖了当前活动的过程版本,否则, 带有常规版本标识的版本将是CALL语句调用的版本。 routine-version-id 必须标识当前服务器上已经存在的程序版本。
- 重新生成
- 重新生成一个版本的程序。 当应用 Db2 维护时,SQL过程的生成方式会发生变化,可能需要重新生成该过程来处理维护更改。
REGENERATE(重新生成)在本地服务器上自动重新绑定用于过程SQL控制语句的程序包,并重新绑定用于过程主体中SQL语句的程序包。 如果还需要远程绑定,则必须对所有远程服务器明确执行 BIND PACKAGE COPY 命令。
REGENERATE不同于REBIND PACKAGE命令,后者会重新绑定SQL语句(即为这些语句生成更好的访问路径),但过程定义中的SQL控制语句保持不变。
使用应用程序兼容性 appcompat-level
指定用于重新生成程序版本的应用程序兼容性级别。 如果现有版本的定义包含需要更高应用程序兼容性的语法、语义或选项,则ALTER语句会返回错误。 当版本最近一次定义或重新生成时,运行的应用程序兼容级别高于 applcompat 级别时,就会出现这种情况。可以指定下列值:

V12R1M5nn

与已识别的 Db2 12 功能级别行为兼容。 例如,
V12R1M510指定与最高可用 Db2 12 功能级别兼容。 必须激活同等或更高的功能级别。
有关每个应用程序兼容性级别中可用的新功能的信息,请参阅 V12R1Mnnn 应用程序兼容性级别。
提示:
对于使用数据服务器客户端或驱动程序访问 Db2 for z/OS® 的应用程序,可能需要额外的程序准备步骤来提高应用程序兼容性级别。 有关详细信息,请参阅为数据服务器客户端和驱动程序设置应用程序兼容性级别。

V12R1
与 Db2 12 功能 500 级的行为兼容。 该值与指定 V12R1M500的结果相同。
- V11R1
- 与 Db2 11 新功能模式的行为兼容。 迁移到 Db2 12 后,此值与指定
V12R1M100具有相同的结果。 欲了解更多信息,请访问 V11R1 应用程序兼容性级别 - V10R1
- 与 DB2® 10 新功能模式的行为兼容。 更多信息,请参阅 V10R1 应用程序兼容性级别。
如果省略了“应用程序兼容性”选项,则再生将使用适用 SYSIBM.SYSPACKAGE 目录表行的APPLCOMPAT值。

- DROP VERSION 例程版本 ID
- 删除以常规版本标识符标识的程序版本。 routine-version-id 是定义版本时分配的版本标识符。 routine-version-id 必须标识当前服务器上已经存在的过程版本,而不能标识当前活动过程版本。 只有已识别的版本才会被删除。
当当前服务器上只有一个版本的程序时,使用DROP PROCEDURE语句删除该程序。 如果版本标识符与当前例程版本特殊寄存器的内容相同,则可以删除该版本,前提是该版本不是当前正在运行的版本。
- (参数声明 ……)
- 指定正在定义或更改的过程版本的参数数量、数据类型和每个参数的用法以及每个参数的名称。 对于本程序的所有其他版本,参数的数量、指定的数据类型以及每个参数的用法必须与参数对应位置的数据类型相匹配。 数据类型的同义词被视为匹配项。
IN、OUT和INOUT指定参数的使用。 参数的使用必须与同一程序的其他版本中参数的隐式或显式使用相匹配。
- IN
- 识别作为过程输入参数的参数。 在进入程序时,参数的值是返回给调用SQL应用程序的值,即使程序中对该参数进行了更改。
IN 是缺省方式。
- OUT
- 将参数标识为过程返回的输出参数。 如果未在程序中设置参数,则返回空值。
- INOUT
- 识别作为过程输入输出参数的参数。 如果参数未在程序中设置,则返回其输入值。
- 参数名称
- 指定用作SQL变量的参数。 该名称不能与该版本程序的任何其他参数名称相同。 此版本程序中的参数名称可能与此程序其他版本中相应参数的名称不同。
- 内置式
- 指定参数的数据类型。 有关数据类型规范的更多信息,请参见 CREATE PROCEDURE语句(SQL——本机过程 )。
- distinct-type-name
- 输入参数的数据类型是不同的类型。 参数的任何长度、精度、比例、子类型或编码方案属性都是不同类型的源类型的属性。 该特殊类型不能基于LOB数据类型。
- 数组类型名称
- 输入参数的数据类型为用户定义的数组类型。
如果您指定了数组类型名称而没有模式名称, Db2 将通过在SQL路径中搜索模式来解析数组类型。
- 非确定性或确定性
- 指定每次调用时,使用相同的输入和输出参数,程序是否返回相同的结果。
- NOT DETERMINISTIC
- 即使数据库中引用的数据没有变化,每次调用时,使用相同的IN和INOUT参数,该过程可能不会返回相同的结果。
默认值为“非确定性”。
- DETERMINISTIC
- 如果数据库中引用的数据没有变化,那么每次调用该过程并使用相同的IN和INOUT参数时,结果总是相同的。
Db2 不验证程序代码是否符合确定性或非确定性的规范。
- 修改 SQL 数据、读取 SQL 数据或包含 SQL
- 指定此例程可以执行或调用的SQL语句和嵌套例程的分类。 数据库管理员负责验证由程序发出的SQL语句以及由程序在本地调用的所有例程是否符合规范;当调用嵌套的远程例程时,不会进行验证。 有关各语句的分类,请参阅例程的 SQL 语句数据访问分类。
- MODIFIES SQL DATA
- 指定该过程可以执行任何SQL语句,但不支持过程不支持的语句。
默认值为“修改 SQL 数据”。
- READS SQL DATA
- 指定该过程可以执行带有数据访问指示的语句,如READS SQL DATA或CONTAINS SQL。 该程序无法执行修改数据的SQL语句。
- CONTAINS SQL
- 指定该过程只能执行访问指示为CONTAINS SQL的SQL语句。 该程序无法执行读取或修改数据的语句。
- CALLED ON NULL INPUT
- 指定如果任何参数值或所有参数值均为空,则调用该过程。
- 动态结果集 整数
- 指定程序可以返回的查询结果集的最大数量。 默认值为动态结果集0,表示没有结果集。 数值必须在0-32767之间。
- 启用调试模式、禁用调试模式或禁用调试模式
- 指定该版本的程序是否可以在调试模式下运行。 使用当前调试模式特殊寄存器的值确定新版本的默认值。
- 允许调试方式
- 指定此版本的程序可在调试模式下运行。 当调用此版本的程序并尝试调试时,必须有一个WLM环境可用。
- 禁用调试方式
- 指定该版本的程序不能在调试模式下运行。
您可以使用后续的ALTER PROCEDURE语句将此选项更改为ALLOW DEBUG MODE。
- 禁用调试方式
- 指定该版本的程序永远不能在调试模式下运行。
在创建、替换或更改了使用“禁用调试模式”的流程版本后,无法更改流程版本以指定“允许调试模式”或“禁用调试模式”。 要更改指定为禁用调试模式的程序的调试模式,必须使用所需的选项删除并重新创建该程序的版本。
当禁用调试模式生效时,调试模式的WLM环境选项将被忽略。
- PARAMETER CCSID
- 指示字符或图形字符串参数的编码方案是ASCII、EBCDIC还是UNICODE。 默认编码方案是在参数列表的CCSID子句中或在安装面板DSNTIPF的编码方案字段中指定的值。
该条款为指定字符或图形字符串参数的编码方案提供了便利。 如果除了此 PARAMETER CCSID 子句之外,还为单个参数指定了单独的 CCSID 子句,则所有 CCSID 子句中指定的值必须与此子句中指定的值相同。
如果参数的数据类型是用户定义的字符串或图形类型,则该字符串或图形类型的CCSID必须与此子句中指定的值相同。
如果参数的数据类型是用户定义的数组类型,且该类型由字符或图形字符串数组元素或字符串数组索引定义,则这些数组属性的 CCSID 必须与此子句中指定的值相同。
该条款还规定了用于系统生成的常规参数的编码方案。
QUALIFIER 模式名
指定隐式限定符,用于存储过程正文中引用的未限定的对象名称。 有关如何确定该选项的默认值的信息,请参阅未限定的别名、索引、JAR 文件、掩码、权限、序列、表、触发器和视图名称。 
- 包裹所有者授权-姓名
-
指定与过程版本关联的程序包的所有者。 进程的SQL授权ID为默认值。
此授权ID必须具有执行例程正文中SQL语句所需的权限,并且必须包含必要的绑定权限。 打包所有者选项的价值在发送到远程系统时可能会发生转换。
授权要求请参阅 BIND PACKAGE子命令(DSN) 的授权部分。
- ASUTIME
- 以CPU服务单元为单位,指定单个过程调用可以运行的处理器总时间。 该值与资源限制规格表的 ASUTIME 列无关。
当您调试一个程序时,如果程序陷入循环,设置一个限制可能会有所帮助。 有关服务单元的信息,请参阅 z/OS MVS Initialization and Tuning Guide。
- 无限制
- 指定该程序可以运行的CPU服务单元数量没有限制。
默认值为“无限制”。
- 极限整数
- CPU服务单元的数量限制为1-2147483647之间的正整数。 如果程序使用的服务单元数量超过指定值, Db2 将取消该程序。 在程序中,并行任务所消耗的CPU周期不计入指定的ASUTIME LIMIT。
- COMMIT ON RETURN NO, COMMIT ON RETURN YES ,或 AUTONOMOUS
- 指示 Db2 是否在程序返回时立即提交交易。
- COMMIT ON RETURN NO
- Db2 当程序返回时,不会发出提交。 NO 是缺省值。
- COMMIT ON RETURN YES,
- Db2 当程序返回时,如果以下语句为真,则发出提交:
- CALL语句返回的SQLCODE不是负数。
- 该程序并非必须中止。
提交操作包括调用应用程序进程和过程执行的工作。
如果该过程返回结果集,那么与结果集相关联的游标必须已定义为 WITH HOLD,以便在落实后可用。
- AUTONOMOUS
- Db2 在独立于调用应用程序的工作单元中执行SQL过程。 当指定此选项时,在返回调用应用程序之前,程序将遵循“返回时提交”选项的规则。 但是,它不会更改呼叫应用程序。 当指定自动驾驶时:
- 动态结果集0必须有效。
- 存储过程参数不得定义为:
- 一种LOB类型
- XML数据类型
- 一种基于LOB或XML值的独特数据类型
- 定义为包含LOB类型数组元素的数组类型
当自动程序正在执行时,不能为全局变量赋值。
- 继承特殊注册或默认特殊注册
- 指定在进入例程时如何设置特殊寄存器。
- INHERIT SPECIAL REGISTERS
- 指定特殊寄存器的值是否按照用户定义函数或存储过程的特殊寄存器表中列出的规则进行继承。
默认设置是“INHERIT SPECIAL REGISTERS”。
- 默认特殊注册
- 指定特殊寄存器初始化为默认值,如用户定义函数或存储过程的特殊寄存器中特殊寄存器特征表的规则所示。
- 调试模式下的WLM环境名称
- 指定 Db2 在调试程序时使用的WLM(工作负载管理器)应用程序环境。 WLM环境名称是一个SQL标识符。
如果您没有指定调试模式的WLM环境, Db2 将使用安装时指定的WLM默认存储过程地址空间。
当禁用调试模式时,调试模式下的WLM环境值将被忽略。
您必须拥有WLM应用环境的相应权限。
- 推迟准备或不推迟准备
- 指定是延迟准备引用远程对象的动态 SQL 语句,还是立即准备。
默认值取决于为REOPT选项指定的值。 如果指定了 REOPT NONE,则默认值为 NODEFER PREPARE。 否则,默认值为“推迟准备”。
- 推迟 准备
- 指定将推迟准备引用远程对象的动态 SQL 语句。
有关分布式处理的注意事项,请参阅 DEFER和NODEFER绑定选项。
- 不服从 准备
- 指定不会延迟引用远程对象的动态 SQL 语句的编制。
- 当前数据
- 指定当游标稳定性隔离级别生效时,是否要求只读和模糊游标的数据保持最新。 当前数据还决定着块获取是否可用于分布式、模糊游标。 有关更新光标当前行、数据块获取和数据货币的更多信息,请参阅选择 CURRENTDATA 选项。
- YES
- 指定只读和模糊游标需要数据货币。 Db2 已获取页面或行锁以确保数据更新。 对于分布式、模糊游标,不允许块获取。
- 否
- 指定只读和模糊游标不需要数据货币。 对于分布式、模糊游标,允许块获取。 如果程序试图在打开模糊游标后动态准备并执行 DELETE WHERE CURRENT OF 语句,则不建议使用 CURRENT DATA(NO)。 如果您的程序试图对以下游标使用DELETE WHERE CURRENT OF语句,则会收到负SQLCODE:
- 正在使用块获取的光标
- 使用并行性查询的游标
- 放置在由此或另一个应用程序进程修改的行上的游标
NO 是缺省值。
- DEGREE
- 指定是否尝试使用并行处理来运行查询,以最大限度地提高性能。
- 1
- 指定不应使用并行处理。
1是默认值。
- 任何
- 指定可以使用并行处理。
- 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语句是否可以包含GRANT、REVOKE、ALTER、CREATE、DROP和RENAME语句。
除了DYNAMICRULES条款的价值外,原生SQL程序的运行环境还控制着动态SQL语句在运行时的行为。 DYNAMICRULES值和运行环境共同决定了动态SQL属性的值。 该组属性值被称为动态 SQL 语句行为。 可以指定下列值:- 运行
- 指定动态 SQL 语句将使用运行行为进行处理。
默认值为“运行”。
- BIND
- 指定动态 SQL 语句将使用绑定行为进行处理。
- DEFINEBIND
- 指定动态 SQL 语句将使用定义行为或绑定行为进行处理。
- DEFINERUN
- 指定动态 SQL 语句将使用定义行为或运行行为进行处理。
- INVOKEBIND
- 指定动态 SQL 语句将使用调用行为或绑定行为进行处理。
- INVOKERUN
- 指定动态 SQL 语句使用调用行为或运行行为进行处理。
- 应用编码方案
- 指定过程体中静态 SQL 语句中 SQL 变量的默认编码方案。 如果未将CCSID子句指定为数据类型的一部分,且未指定参数CCSID例程选项,则该值用于在复合语句中定义SQL变量。
- ASCII
- 指定使用服务器的ASCII CCSID对数据进行编码。
- EBCDIC
- 指定使用服务器的EBCDIC CCSID对数据进行编码。
- UNICODE
- 指定使用服务器的Unicode CCSID对数据进行编码。
有关如何确定此选项的默认值的信息,请参阅编码绑定选项。
- 有解释或无解释
- 指定是否提供有关过程中的 SQL 语句如何执行的信息。
- 无需解释
- 指定不提供有关程序中SQL语句如何执行的信息。
对于嵌入在原生 SQL 程序中的语句,如果该程序使用 WITH EXPLAIN 指定,则可以通过在程序主体中嵌入 SQL 语句 EXPLAIN 来获得 EXPLAIN 输出。 否则,EXPLAIN选项适用于过程体中所有可解释的SQL语句,以及任何DECLARE CURSOR语句的fullselect部分。
默认值为“无解释”。
- 附带解释
- 指定提供有关过程中的SQL语句如何执行的信息。 信息被插入到表所有者.PLAN_TABLE中。 owner 是程序包所有者的授权ID。 或者,操作所有者的授权ID可以有一个别名, 例如owner.PLAN_TABLE ,指向基础表PLAN_TABLE。 所有者还必须对该表拥有适当的 SELECT 和 INSERT 权限。 WITH EXPLAIN不会获取访问远程对象的语句的信息。 PLAN_TABLE必须有一个基本表,可以有多个别名,别名与PLAN_TABLE相同,但具有不同的模式限定符;它不能是视图或同义词。 它应该在版本添加或替换之前存在。 在所有 owner.PLAN_TABLE 插入中,QUERYNO的值是由 Db2 分配的语句编号。
如果存在DSN_STATEMNT_TABLE和DSN_FUNCTION_TABLE两个可选表,则WITH EXPLAIN选项也会填充这两个表。 DSN_STATEMNT_TABLE包含SQL语句的处理成本估算。
有关 EXPLAIN 语句的更多信息,包括 WITH EXPLAIN 选项填充的表的说明,请参阅 EXPLAIN 语句。
- 立即写入或不立即写入
- 指定是否对组缓冲池相关页面集或分区进行更新时立即写入。 此选项仅适用于数据共享环境。 即时写入子系统参数不影响此选项。 即时写入绑定选项显示了即时写入绑定选项(与该过程选项类似)的隐含层次结构,因为它会影响运行时间。
- 无需立即撰写
- 指定执行正常的写入活动。 依赖于组缓冲池的更新页面在提交的第一阶段或之前写入,或者对于已回滚的事务,在中止结束时写入。
默认值为“不立即写入”。
- 立即写
- 指定一旦缓冲区更新完成,立即写入依赖于组缓冲池的更新页面。 即使缓冲区在事务处理前进或回滚期间更新,更新的页面也会立即写入。 立即写入可能会影响性能。
- 隔离等级 RR、RS、CS 或 UR
- 指定将过程与其他正在运行的应用程序的影响隔离的程度。 有关隔离等级的信息,请参阅 “选择发布选项 ”。
- RR
- 指定可重复读取。
- RS
- 指定读取稳定性。
- CS
- 指定光标稳定性。 CS是默认设置。
- UR
- 指定未承诺的读取。
- 保持动态或取消保持动态
- 指定 Db2 是否在提交点之后保留动态SQL语句。
- 保持活力
- 指定 Db2 在提交点之后不保留动态SQL语句。
默认设置是“不保持动态”。
- 保持活力
- 指定 Db2 在提交点之后保留动态SQL语句。 如果您指定了“保持动态”,应用程序就不需要在每个提交点之后准备SQL语句。 Db2 保持动态 SQL 语句,直到发生以下情况之一:
- 申请流程结束
- 发生回滚操作
- 应用程序执行一个显式的 PREPARE 语句,该语句的标识符与动态 SQL 语句相同
如果您指定了 WITH KEEP DYNAMIC,并且动态语句缓存处于活动状态,则 Db2 子系统会在缓存中保留已准备语句的副本。 如果动态语句缓存未激活,则子系统仅保留提交点之前的SQL语句字符串。 如果应用程序对该语句执行OPEN、EXECUTE或DESCRIBE操作,则该语句被隐式准备。
如果您指定了“保持动态”,则用于执行具有此选项的程序或包的DDF服务器线程将保持活动状态。 活动 DDF 服务器线程会因空闲线程超时而终止。 更多信息,请参阅 “空闲线程超时”字段(IDTHTOIN子系统参数 )。
如果您指定了“保持动态”,则不能指定“始终重新选择”。 保持动态和始终重新选择是相互排斥的。 但是,您可以指定“保持动态”和“重新选择一次”。
如果您的DRDA客户端应用程序使用定义为WITH HOLD的光标,请使用WITH KEEP DYNAMIC来提高性能。 当没有更多行需要检索时, Db2 子系统会自动关闭光标,从而避免发送额外的网络消息。
- OPTHINT 常量字符串
- 指定是否将查询优化提示用于存储过程主体中包含的静态 SQL 语句。
string-constantis 长度不超过 128 字节的字符串, Db2 子系统在 PLAN_TABLE 中搜索行作为输入时使用。 默认值为空字符串,表示 Db2 子系统不对静态SQL语句使用优化提示。
优化提示仅在您的系统启用优化提示时使用。 更多信息,请参阅 “优化提示”字段(OPTHINTS子系统参数 )
SQL PATH
指定 Db2 子系统用于解析存储过程正文中(CALL 语句中)未限定的用户定义类型、函数和存储过程名称的 SQL 路径。 默认值为 “SYSIBM”、“SYSFUN”、“SYSPROC”、“SYSIBMADM ”和QUALIFIER选项的值。SQL路径的最大长度为2048字节。 Db2 通过以下方式计算长度:取指定的每个模式名称 ,删除其末尾的空白,在其前后添加两个分隔符,并在每个模式名称后添加一个逗号,但最后一个除外。 生成的字符串长度不能超过2048字节。
- schema-name
- 指定模式。 Db2 在处理ALTER语句时,不保证指定的模式实际存在。
SYSPUBLIC不能指定为SQL路径。
- 架构名称列表
- 指定以逗号分隔的架构名称列表。 同一个模式名称不应在模式名称列表中出现两次以上。 可指定的模式名称数量受生成的 SQL 路径最大长度的限制。
SYSPUBLIC不能指定为SQL路径。
- 系统 PATH
- 指定架构名称 “SYSIBM”、“SYSFUN”、“SYSPROC”、“SYSIBMADM ”。
- SESSION_USER 或者 USER
- 指定SESSION_USER(或USER)特殊寄存器的值。 在处理ALTER语句时,实际长度包含在为PATH选项指定的模式名称列表的总长度中。 如果在模式名称列表中指定了 SESSION_USER(或 USER),请不要在 SESSION_USER(或 USER)关键字前后使用分隔符。

- 发布
- 指定何时释放过程使用的资源:在每个提交点或过程结束时。
- COMMIT
- 指定在每个提交点释放资源。
COMMIT是默认值。
- DEALLOCATE
- 指定仅在程序终止时释放资源。 DEALLOCATE对通过DRDA连接客户端系统在 Db2 服务器上运行的程序包没有影响。 DEALLOCATE对动态SQL语句也没有影响,后者总是使用RELEASE AT COMMIT,但以下情况例外:当您使用RELEASE AT DEALLOCATE子句和WITH KEEP DYNAMIC子句时,并且子系统在安装面板 DSNTIP8 上以YES值安装了CACHE DYNAMIC SQL字段,则动态SELECT和SQL数据更改语句将使用RELEASE AT DEALLOCATE选项。
在以下任一事件发生时,为动态陈述而购买的锁将被收回:
- 应用程序进程结束。
- 申请流程会生成一份带有相同声明标识符的预备声明。 (在下一个提交点解锁)。
- 由于该语句未被使用,因此已从动态语句缓存中删除。 (在下一个提交点解锁)。
- 声明所依赖的对象被删除或更改,或者声明所需的特权被撤销。 (在下一个提交点解锁)。
释放 AT DEALLOCATE 可能会增加包的大小,因为附加项目会驻留在包中。
如需了解有关“发布”条款如何影响锁定和并发性的更多信息,请参阅 “选择发布选项 ”。
- 查询 加速
- 指定是否对静态 SQL 查询进行加速,如果是,则指定加速行为。
- 无
- 指定应用程序中的静态SQL查询不会绑定加速,也不会在应用程序运行时加速。
- ENABLE
- 指定静态SQL查询在满足加速条件(包括成本和启发式条件)时进行加速。 当应用程序运行时,查询将发送至加速器。 否则,如果静态查询不符合加速条件,则查询将在 Db2 中执行。
如果在应用程序运行时执行加速静态查询时出现错误情况(例如以下示例中的情况), Db2 将失败,并向应用程序返回负SQL代码:
- 在加速器上运行静态查询时出现故障。
- 查询时,加速器返回错误。
- 加速器未启动, Db2 无法将静态查询路由到加速器执行。
- 启用(带故障恢复)
- 结果与ENABLE 相同,除非在应用程序运行时,加速静态查询首次打开时出现错误条件。 在这种情况下, Db2 不会让静态查询失败并向应用程序返回负面的SQL代码,而是对查询执行临时语句级增量绑定,并在 Db2 中运行查询。 应用程序没有发现加速故障。 当应用程序成功打开加速器查询后,无法再发送电子邮件至 Db2 。
- 合格
- 指定如果静态SQL查询满足基本加速条件,则无论代价或启发式条件如何,都将加速该查询。 当应用程序运行时,查询将发送至加速器。
与ENABLE 的行为一样,如果在应用程序运行时执行加速静态查询时出现错误, Db2 将失败,并向应用程序返回负SQL代码。
- 全部
- 指定应用程序中的所有静态SQL查询在应用程序运行时绑定到加速器并路由到加速器。 如果 Db2 确定静态查询无法绑定到加速器上运行,并且查询引用了用户基础表或视图,则BIND或REBIND PACKAGE操作将失败,并显示该查询的错误消息。 (已声明的全局临时表(DGTT)和已创建的全局临时表(CGTT)除外,因为这些表无法加速。)
与ENABLE 的行为一样,如果在应用程序运行时执行加速静态查询时出现错误, Db2 将失败,并向应用程序返回负SQL代码。
此绑定选项不适用于在例程的 RETURN 语句中指定的 fullselect 或 WITH 共用表表达式 ,也不适用于在例程中使用的 SET 主机变量赋值。 在这种情况下,无法加速查询。
- get_accel_archive
- 指定用于加速的静态SQL查询是否检索加速器上的存档数据,而不是活动数据。
- 否
- 指定不使用静态SQL查询从加速器中检索已归档的数据。 如果静态查询也不需要加速,则查询将在 Db2 中运行。
如果静态查询因指定了QUERYACCELERATION绑定选项而加速,则当应用程序运行时,查询将路由到加速器;但是,查询不会检索任何存档数据。
- YES
- 指定如果满足以下所有条件,则查询将加速,并在应用程序运行时检索加速器上的存档数据:
- QUERYACCELERATION绑定选项也已指定。
- 静态SQL查询引用了加速表,该表将分区数据存档在加速器上。
- 静态查询满足QUERYACCELERATION绑定选项指定的加速条件。
如果静态查询不符合QUERYACCELERATION绑定选项指定的加速条件,则BIND或REBIND PACKAGE操作会失败,并显示该查询的错误消息。
此绑定选项不适用于在例程的 RETURN 语句中指定的 fullselect 或 WITH 共用表表达式 ,也不适用于在例程中使用的 SET 主机变量赋值。 在这种情况下,无法加速查询。
加速度
指定加速器在等待复制 Db2 运行查询之前发生的已提交 Db2 数据更改时延迟查询的最大时间(如果有)。对于静态加速查询,您还必须将此函数或过程的QUERYACCELERATION绑定选项设置为NONE以外的合法值,以请求加速静态查询。 如果QUERYACCELERATION绑定选项值设置为NONE,则ACCELERATIONWAITFORDATA绑定选项将被接受,并且程序包将绑定该选项值;但是,该选项将不适用于静态SQL查询,因为不会加速任何静态查询。
对于动态加速查询,指定加速等待数据绑定选项也会初始化当前查询加速等待数据特殊寄存器,该寄存器用于 Db2 函数或程序中的动态查询,前提是函数或程序选项默认特殊寄存器也被使用。 将当前查询加速等待数据初始化为大于0的值,指定 Db2 和加速器将对所有由 Db2 函数或过程加速的动态SQL查询应用等待数据延迟行为和限制。 当前查询加速特殊寄存器必须具有除“无”以外的其它有效值,才能请求加速动态查询。
- nnnn.m
- 指定一个 DECIMAL(5,1) 数字常量值,该值指定在加速器等待复制在 Db2 运行查询之前发生的已提交 Db2 数据更改时,加速器将延迟查询的最大秒数。
您可以指定一个介于 0.0 到 3600.0 秒之间的值。 例如, 20.0 表示 20.0 秒(或 20000 毫秒),而 30.5 表示 30.5 秒(或 30500 毫秒)。 3600.0 的最大值表示查询延迟了3600秒。
您也可以将数值指定为介于0-3600秒之间的整数常量, Db2 会将该数值转换为DECIMAL(5,1)格式。
重要 :当为 ACCELERATIONWAITFORDATA 绑定选项指定非零值时, Db2 和加速器将对应用程序包加速的所有查询应用其他 WAITFORDATA 延迟行为、限制和要求。 这些行为、限制和要求可能会导致以前成功加速的查询不再加速或失败。 请参阅 SET CURRENT QUERY ACCELERATION WAITFORDATA语句 ,了解有关WAITFORDATA行为、限制和要求的更多信息。
加速器
指定一个加速器服务器,如果该服务器已启用且可用, Db2 会将其视为符合条件的 SQL 查询的首选加速器,然后再将查询发送到其他加速器服务器。 如果指定的加速器服务器未启用或不可用, Db2 将把查询发送到其他可用的加速器服务器。
- REOPT
- 指定 Db2 是否将在运行时使用SQL变量或SQL参数、参数标记和特殊寄存器的值来确定访问路径。
- 无
- 指定 Db2 不会在运行时通过SQL变量或SQL参数、参数标记和特殊寄存器的值来确定访问路径。
缺省值为“无”。
- ALWAYS
- 指定每次运行SQL语句时, Db2 始终在运行时确定访问路径。
- ONCE
- 指定 Db2 仅在第一次打开动态SQL语句时确定一次访问路径。 在预编译语句失效或被从动态语句高速缓存中除去并且需要再次预编译之前,会一直使用此访问路径。
- 确认运行或确认绑定
- 指定是否在运行时重新检查绑定或重新绑定期间发现的“OBJECT not FOUND”和“NOT AUTHORIZED”类型的错误。 如果所有对象和所需权限都已存在,则该选项不起作用。
- 验证运行
- 指定当处理ALTER PROCEDURE语句时,如果所需对象或权限不存在,则返回警告消息,但ALTER PROCEDURE语句仍会成功。 Db2 子系统会在运行时重新检查那些在处理ALTER PROCEDURE语句时未能通过检查的SQL语句的对象和权限。 授权检查程序包所有者授权ID的使用情况。
默认值为“验证运行”。
- 确认绑定
- 指定如果在处理ALTER PROCEDURE语句时所需的对象或权限不存在,则将发出错误,ALTER PROCEDURE语句将失败。
- 四舍五入
- 指定处理DECFLOAT数据的舍入模式。
- 圆形天花板
- 指定数字取整为正无穷大。
- 四舍五入
- 指定数字四舍五入为0(截断)。
- 圆地板
- 指定数字舍入为负无穷大。
- Dec_round_half_down
- 指定数字四舍五入取整;如果等距,则向下取整。
- 十进制半双
- 指定数字四舍五入取整;如果等距,则四舍五入取整,使最后一位数字为偶数。
- 十进制半上
- 指定数字四舍五入取整;如果等距,则向上取整。
- 四舍五入
- 指定数字舍入到0以外。
- 日期格式 ISO、欧元、美国、日本或本地
- 指定日期或时间值的字符串表示形式结果值的日期格式。 更多信息请参见日期时间值的字符串表示。
默认格式在定义程序的系统的安装面板 DSNTIP4 的日期格式字段中指定。 除非您有日期退出程序,否则无法使用“本地”选项。
- DECIMAL(15)、DECIMAL(31)、DECIMAL (15,s) 或 DECIMAL (31,s)
- 指定十进制算术运算的最大精度。 更多信息,请参阅 《两位小数运算的算术 》。 默认格式在定义程序的系统的安装面板 DSNTIPF 的 DECIMAL ARITHMETIC 字段中指定。 如果指定了 pp. s 形式, 则 s 必须是 1-9 范围内的数字。s 表示用于除法的最小小数位数。
- 可选更新条款或必填更新条款
- 指定如果游标用于执行定位更新,则DECLARE CURSOR语句是否需要FOR UPDATE子句。
- 需要更新条款
- 规定如果游标将用于定位更新,则必须将FOR UPDATE子句作为游标定义的一部分。
默认情况下,需要更新条款。
- 更新条款可选
- 指定在定位更新中使用游标时,无需指定 FOR UPDATE 子句。 过程体可以包含已定位的UPDATE语句,用于更新用户有权限更新的列。
如果该过程的DBRM非常大,当您指定FOR UPDATE CLAUSE OPTIONAL时,可能需要额外的存储空间。
- 时间格式 ISO、EUR、USA、JIS 或本地
- 指定日期或时间值的字符串表示形式结果值的时间格式。 更多信息请参见日期时间值的字符串表示。
默认格式在定义程序的系统的安装面板 DSNTIP4 的“时间格式”字段中指定。 除非您有日期退出程序,否则无法使用“本地”选项。
- BUSINESS_TIME SENSITIVE
- 确定静态和动态 SQL 语句中对应用期间临时表的引用是否受 CURRENT TEMPORAL BUSINESS_TIME 特殊寄存器的值影响。
- YES
- 对申请期间临时表的引用受当前临时业务时间特殊寄存器的值的影响。 缺省值是 YES。
- NO
- 对申请期间临时表的引用不受当前临时业务时间特殊寄存器的值的影响。
更多信息,请参阅当前时间业务时间特别登记册。
- SYSTEM_TIME SENSITIVE
- 确定静态和动态 SQL 语句中对系统周期临时表的引用是否受 CURRENT TEMPORAL SYSTEM_TIME 特殊寄存器的值影响。
- YES
- 对系统周期时态表的引用会受CURRENT TEMPORAL SYSTEM_TIME专用寄存器的值影响。 缺省值是 YES。
- NO
- 对系统周期时态表的引用不会受CURRENT TEMPORAL SYSTEM_TIME专用寄存器的值影响。
更多信息,请参阅当前时间系统_时间特殊寄存器。
- ARCHIVE SENSITIVE
- 确定SQL语句中对启用存档的表的引用是否受 SYSIBMADM.GET_ARCHIVE 内置全局变量值的影响。
- YES
- 对启用存档的表的引用受 SYSIBMADM.GET_ARCHIVE 内置全局变量值的影响。 缺省值是 YES。
- NO
- 对启用存档的表的引用不受 SYSIBMADM.GET_ARCHIVE 内置全局变量值的影响。
更多信息,请参阅 GET_ARCHIVE内置全局变量。
APPLCOMPAT Appcompat-level
指定存储过程正文中 SQL 语句的应用程序兼容性行为。 如果未指定此选项,则行为由包的先前绑定的 applcompat 级别决定(如果存在),否则由 APPLCOMPAT 子系统参数决定。可以指定以下应用兼容级别值:
V12R1M5nn

与已识别的 Db2 12 功能级别行为兼容。 例如,
V12R1M510指定与最高可用 Db2 12 功能级别兼容。 必须激活同等或更高的功能级别。
有关每个应用程序兼容性级别中可用的新功能的信息,请参阅 V12R1Mnnn 应用程序兼容性级别。
提示:
对于使用数据服务器客户端或驱动程序访问 Db2 for z/OS 的应用程序,可能需要额外的程序准备步骤来提高应用程序兼容性级别。 有关详细信息,请参阅为数据服务器客户端和驱动程序设置应用程序兼容性级别。

V12R1
与 Db2 12 功能 500 级的行为兼容。 该值与指定 V12R1M500的结果相同。
- V11R1
- 与 Db2 11 新功能模式的行为兼容。 迁移到 Db2 12 后,此值与指定
V12R1M100具有相同的结果。 欲了解更多信息,请访问 V11R1 应用程序兼容性级别 - V10R1
- 与 DB2 10 新功能模式的行为兼容。 更多信息,请参阅 V10R1 应用程序兼容性级别。

浓缩语句或浓缩语句中的词汇
FL 500 指定例程中指定字面常量的每条动态 SQL 语句是否作为单独的唯一语句条目缓存在动态语句缓存中,而不是共享缓存中的现有语句。 如果新语句满足共享同一动态语句缓存版本的所有条件,则动态 SQL 语句有资格共享缓存中的现有语句,但新语句指定的一个或多个字面常量必须与缓存语句不同。- 集中陈述 OFF
指定每个动态SQL语句,如果指定一个或多个与同一动态语句的缓存版本不同的常量,则该语句将被缓存为唯一的语句条目。 集中式语句 OFF 是默认的动态语句缓存行为。
- 用文字浓缩语句
指定每个指定文字常量的动态 SQL 语句将共享同一个动态语句的缓存版本,该动态语句也是使用 CONCENTRATE STATEMENTS WITH LITERALS 选项准备的,前提是新的动态语句满足共享缓存语句的所有条件,并且指定的常量可以代替缓存语句中的常量重复使用。

- SQL 常规语句主体
- 指定定义SQL过程主体的语句。 有关原生 SQL 程序中支持的 SQL 控制语句的信息,请参阅 SQL 过程语言(SQL PL )。 如果 SQL过程语句是过程主体中唯一的语句,则该语句不能以分号结尾。
ALTER PROCEDURE(SQL - 原生)的注释
- 更改程序版本的注意事项
- 要更改一个存储过程的版本,当发出ALTER PROCEDURE语句时,环境设置必须与使用CREATE PROCEDURE或ALTER PROCEDURE语句首次创建该存储过程版本时(如果指定了以下选项之一)的环境设置相同:
- QUALIFIER
- PACKAGE OWNER
- OPTHINT
- SQL PATH
- DECIMAL (如果数值包含逗号
对于 WLM FOR DEBUG MODE 子句,指定的名称必须可以在定义对象或版本的原始语句的 CCSID 中表示。
- 转换为本地SQL程序
- 您不能将外部SQL程序更改为本机SQL程序。 您可以使用DROP语句删除要更改的外部SQL过程,并使用CREATE PROCEDURE语句创建具有类似定义的本机SQL过程。 或者,您可以使用不同的架构创建一个本机 SQL 程序。
- 识别码解析
- 有关如何将名称解析为列、SQL变量或本地SQL程序的SQL例程的信息,请参阅 SQL程序语言(SQL PL )。 外部SQL程序中的名称解析保持不变。
如果列、SQL 变量和参数使用了重复的名称,请使用列的表设计符、参数的过程名称和 SQL 变量的标签名称来限定重复的名称。
- 为程序版本生成的包的特征
- 与程序版本相关的软件包的命名规则如下:
- location 设置为 CURRENT SERVER 特殊寄存器的值
- 程序包的集合标识符 (模式)与过程的模式限定符相同
- package-id 与特定程序的名称相同
- version-id 与初始版本的程序版本标识符相同
使用与隐式或显式指定的过程选项对应的绑定选项生成包。 除了相应的绑定选项外,该包还使用以下绑定选项生成:
- dbprotocal(drda)
- FLAG(1)
- sqlerror(nopackage)
- 启用(*)
- 程序对象的应用兼容性级别注意事项
- 应用程序兼容性级别控制着新功能和增强功能的采用和使用。 当一个对象被创建或修改时,会使用两个单独的应用程序兼容级别:一个用于处理对象的定义,另一个用于处理对象正文中的SQL语句:
对象定义 当前应用程序兼容性特殊寄存器值用于处理对象定义,但对象主体中的语句除外
此应用程序兼容性级别存储在 SYSENVIRONMENT.APPLCOMPAT 列中。 您可以在对象的目录定义中使用环境ID值来定位具有匹配ENVID值的SYSENVIRONMENT行。
当对象被重新生成时,应用程序兼容性级别可以更改。
物体主体中的陈述 CREATE或ALTER语句的APPLCOMPAT选项隐式或显式指定的应用程序兼容性级别用于处理对象主体中的语句。
此应用程序兼容性级别存储在与对象定义关联的软件包的 SYSPACKAGE.APPLCOMPAT 列中。
- 使用比当前定义更低的兼容性级别更改程序定义
- 如果当前应用程序兼容性特殊寄存器值低于现有对象定义的应用程序兼容性级别,则即使ALTER语句的内容在当前级别有效,更改对象也可能导致错误。 当现有对象定义包含的功能需要比“当前应用程序兼容性”特殊寄存器设置更高的级别时,就会出现错误。
- 再生过程对象的兼容性级别
对于重新生成对象的ALTER语句,使用REGENERATE关键字后面的USING APPLICATION COMPATIBILITY子句隐式或显式指定的应用程序兼容性设置重新处理对象定义。 此应用程序兼容性值将替换与对象定义关联的环境设置中 SYSENVIRONMENT.APPLCOMPAT 列中的现有值。
如果未指定“应用程序兼容性”条款,则使用对象定义中 SYSENVIRONMENT.APPLCOMPAT 列中现有的应用程序兼容性值来重新处理与对象定义相关的文本。
语句在正文中的行为仍然受对象现有APPLCOMPAT选项的值控制。
- 使用 TABLE LIKE name AS LOCATOR 子句定义过程的注意事项
- 如果一个过程使用表参数定义( TABLE LIKE 姓名 AS LOCATOR 子句在 CREATE PROCEDURE 语句中指定以指示输入参数之一是转换表),如果更改需要指定参数列表,则不能使用 ALTER PROCERDURE 语句更改该过程。 例如,要添加或替换本机 SQL 过程的版本,必须先删除该过程,然后再重新创建。
- SQL处理器程序的注意事项
- SQL处理器程序(如SPUFI、 Db2 command line processor 和 DSNTEP2 )可能无法正确解析以分号结尾的常规主体中的SQL语句。 这些处理器程序接受多个SQL语句作为输入,每个语句用终止符分隔。 使用分号作为SQL语句终止符的处理器程序可能会截断带有嵌入分号的CREATE FUNCTION语句,并仅将其中一部分传递给 Db2。 因此,您可能需要为这些处理器程序更改 SQL 终止符。 有关更改SPUFI和 DSNTEP2 的终止符的信息,请参阅 《在SPUFI输入数据集中设置SQL终止符 》以及 DSNTEP2 和 DSNTEP4 示例程序。
- 程序选项与绑定选项的对应关系
下表列出了特定CREATE PROCEDURE和ALTER PROCEDURE选项的相应绑定命令选项。 有关绑定选项的更多信息,请参阅软件包、计划和服务中的绑定和重新绑定选项。
程序选项与绑定选项的对应关系CREATE PROCEDURE或ALTER PROCEDURE选项 绑定命令选项
加速度 nnnn.m
accelerationwaitfordata( nnnn.m )
加速器加速器名称
加速器(加速器名称)
应用编码方案 ASCII 编码(ASCII) 应用编码方案 EBCDIC ENCODING(EBCDIC) 应用程序编码方案 UNICODE 编码(统一码) 档案 敏感 不 档案敏感(否) 档案 敏感 是 档案敏感(是) 业务时间敏感 不 对时间敏感(否) 业务时间敏感 是 对时间敏感(是) 当前数据 无 当前数据(否) 当前数据 是 当前数据(是) 推迟 准备 推迟(准备) 不服从 准备 不服从(准备) 1级 程度(1) 任何学位 学位(任意) 动态规则运行 动态规则(运行) 动态规则绑定 DYNAMICRULES(BIND) 动态规则 定义绑定 动态规则(定义绑定) 动态规则 定义 运行 动态规则(定义运行) 动态规则 调用绑定 动态规则(调用绑定) 动态规则调用运行 动态规则(调用运行) get_accel_archive 没有 获取加速档案(否) 获取加速档案 是 获取加速档案(是) 隔离等级 CS 绝缘(CS) 隔离等级 RS 隔离(RS) 隔离等级 RR 隔离(RR) 隔离等级 UR 隔离(UR) OPTHINT 字符串常量 OPTHINT (提示-ID ) 包裹所有者授权-姓名 所有者 (授权ID ) 限定符 schema-name 限定词 (限定词名称 ) 查询 加速 无 查询加速(无) 查询 加速 启用 查询加速(启用) 查询加速启用,带故障恢复功能 查询加速(启用回退功能) 查询 加速 合格 查询加速(符合条件的) 查询 加速 全部 查询加速(全部) 发布承诺 发布(提交) 释放于DEALLOCATE 释放(解除分配) 永远重启 REOPT(ALWAYS) 重新选择 无 REOPT(NONE) 重新选择一次 REOPT(ONCE) 四舍五入 DEC_ROUND_CEILING 四舍五入(上限) 四舍五入 DEC_ROUND_DOWN 四舍五入 四舍五入 DEC_ROUNDING_FLOOR 四舍五入(取整) 四舍五入 DEC_ROUNDING_HALF_DOWN 舍入(向下取整) 舍入 DEC_ROUNDING_HALF_EVEN 四舍五入(HALFEVEN) 四舍五入 DEC_ROUNDING_HALF_UP 四舍五入(半) 四舍五入 DEC_ROUNDING_UP 四舍五入 SQL PATH 路径说明 路径 (路径说明 ) 系统时间敏感 不 系统敏感(否) 系统时间敏感 是 系统灵敏度(是) 确认绑定 确认(绑定) 验证运行 确认(运行) 附带解释 解释(是) 无需解释 解释(否) 立即写 立即执行(是) 无需立即撰写 即时写入(否) 保持动态 保持动力(是) 无保持动力 保持动力(否)
包件无效
该语句可能会使依赖于目标对象的所有软件包失效,有时还会通过级联效应使其他相关对象失效,具体取决于指定的子句和关键字以及其他因素。
使用 ACTIVATE VERSION 选项的 ALTER PROCEDURE 会使依赖于存储过程先前版本的所有软件包失效。 (如果例程版本标识的值与程序的当前有效版本相同,则激活版本标识不会使程序包失效)。
当SQL程序的某个版本被修改,以更改为活动版本指定的某些选项时,所有引用该程序的应用程序包都会标记为无效,调用这些应用程序包需要重新绑定。 这包括对某些绑定选项和常规选项的更改,这些更改会导致程序的隐式更新。 这些选项在下表中的“更改需要重新绑定调用应用程序”和“更改会导致隐式重新生成整个程序”列中进行了相应标记 更多信息,请参阅 “导致套餐失效的变更 ”。

- 隐式重新绑定和再生
当本地 SQL 存储过程的某些属性发生变化时,存储过程的主体可能会重新生成或再生。 下表中的 "更改会导致整个存储过程正文的隐式再生 "和 "更改会导致存储过程正文中的非控制语句的隐式重新绑定 "两栏总结了更改特定选项时发生隐式重新绑定和再生的情况。
表 1. CREATE PROCEDURE和ALTER PROCEDURE选项会在更改时导致重新绑定或重新生成。 CREATE PROCEDURE或ALTER PROCEDURE选项 更改需要重新绑定调用应用程序吗? 更改结果是否会导致隐式重新绑定程序主体的非控制语句? 改变结果会导致整个流程的隐性再生吗?
加速度
False
是
False
加速器
False
是
False
启用调试模式、禁用调试模式或禁用调试模式 是 1, 2 是的 1 是 应用编码方案 是 是 是 档案 敏感 是 是 是 ASUTIME 是 False False 业务时间敏感 是 是 是 COMMIT ON RETURN 是 False False 当前数据 False 是 False DATE FORMAT 是 是 是 DECIMAL 是 是 是 推迟准备或不推迟准备 False 是 False DEGREE False 是 False 动态结果集 是 False False 动态规则 False 是 False 可选更新条款或必填更新条款 是 是 是
get_accel_archive
是
是
是
继承特殊注册或默认特殊注册 是 False False ISOLATION LEVEL False 是 False 修改 SQL 数据、读取 SQL 数据或包含 SQL 是 是 是 非确定性或确定性 False False False OPTHINT False 是 False 程序包所有者 False 是 False QUALIFIER False 是 False
queryAcceleration
是
是
是
在COMMIT处释放或DEALLOCATE处释放 False 是 False REOPT False 是 False SQL 路径 False 是 False 系统默认故障后停止、nn次故障后停止或故障后继续 是 False False 系统时间敏感 是 是 是 时间格式 是 是 是 确认运行或确认绑定 False 是 False 有解释或无解释 False 是 False 立即写入或不立即写入 False 是 False 保持动态或取消保持动态 False 是 False 调试模式的WLM环境 是 False False 注:- 如果将ALLOW DEBUG MODE的值更改为DISALLOW DEBUG MODE,则程序包会重新生成或重新生成。
- 如果将“不允许调试模式”的值更改为“禁用调试模式”,调用应用程序将无效。
- SYSENVIRONMENTS目录表的注意事项
- ALTER语句用于指定新的环境设置,它将导致在SYSENVIRONMENTS目录表中添加新的一行。 即使随后在处理ALTER语句时遇到错误,也会添加新行。 因此,即使ALTER语句失败,也可能添加新的SYSENVIRONMENTS行。
- 兼容性:
- 为了与 Db2 的早期版本兼容,当以下选项中的任何一个选项被隐式或显式指定为选项列表的一部分时,系统会发出警告,但语句仍会被执行。 但是,如果指定了以下选项之一的 REPLACE 或 ADD VERSION,则会发出错误,语句不会执行。 例如,如果指定了添加版本和保持常驻,则会发出错误。
- STAY RESIDENT
- PROGRAM TYPE
- 运行选项
- NO DBINFO
- 碰撞或未碰撞
- 安全
- PARAMETER STYLE GENERAL WITH NULLS
- 系统默认故障后停止
- 在nn次失败后停止
- 失败后继续
如果本地 SQL 过程指定了 WLM ENVIRONMENT,则必须指定 WLM ENVIRONMENT FOR DEBUG MODE。
为了与CREATE PROCEDURE语句兼容,可以指定以下子句,但会被忽略:
- LANGUAGE SQL
更改模糊程序
混淆程序不能以任何方式更改。
- 其他语法和同义词:
- 为了与 Db2 的早期版本或 Db2 系列中的其他产品兼容, Db2 支持以下关键词:
- 结果集、结果集和动态结果集是 DYNAMIC RESULT SETS。
- VARIANT作为同义词 NOT DETERMINISTIC
- NOT VARIANT作为同义词 DETERMINISTIC
- 常规定义的目录注释注意事项
- 当替换函数定义时,目录中该定义的任何现有注释都会被删除;当重新生成函数定义时,目录中该定义的任何现有注释都会被保留。
ALTER PROCEDURE(SQL - 原生)示例
- 示例 1
- 以下语句更改了 UPDATE_SALARY_1 本机SQL程序的现有版本中的程序选项。 如果您需要更改流程的另一个版本,请在“当前版本”处注明
VERSION routine-version-id。 请注意,版本说明之前的ALTER子句可以省略。ALTER PROCEDURE UPDATE_SALARY_1 ALTER ACTIVE VERSION NOT DETERMINISTIC CALLED ON NULL INPUT ALLOW DEBUG MODE ASUTIME LIMIT 10 - 示例 2
- 要更改任何现有版本的程序主体,您需要使用REPLACE子句。 以下语句更改了 UPDATE_SALARY_1 SQL程序 V2 版本的程序主体和现有的SQL数据访问选项。 请注意,即使未对参数列表进行任何更改,也会显示指定的参数列表。 要替换现有版本的程序,您必须指定参数列表、任何具有非默认值的选项(即使这些选项在您要替换的程序版本中已指定),以及程序主体。
ALTER PROCEDURE UPDATE_SALARY_1 REPLACE VERSION V2 (P1 INTEGER, P2 CHAR(5)) MODIFIES SQL DATA UPDATE EMP SET SALARY = SALARY * RATE WHERE EMPNO = EMPLOYEE_NUMBER; - 示例 3
- 要添加现有流程的新版本,请使用ADD VERSION子句。 以下声明为 UPDATE_SALARY_1 程序添加了新版本,以实现更大幅度的加薪。 请注意,即使新版本的程序使用与现有版本相同的参数,参数列表也会被指定。 要添加新版本的程序,您必须指定参数列表、任何具有非默认值的选项以及程序主体。
ALTER PROCEDURE UPDATE_SALARY_1 ADD VERSION V3 (P1 INTEGER, P2 CHAR(5)) UPDATE EMP SET SALARY = SALARY * (RATE*10) WHERE EMPNO = EMPLOYEE_NUMBER;
- 示例 4
- 当定义了新版本的程序(如例3所示)时,如果新版本的程序将成为当前活动的版本,则必须使用带有ACTIVATE VERSION子句的ALTER PROCEDURE语句,如下例所示。
ALTER PROCEDURE UPDATE_SALARY_1 ACTIVATE VERSION V3; - 示例 5
- 要更新当前正在运行的程序版本,请使用以下语句。
ALTER PROCEDURE UPDATE_SALARY_1 REGENERATE ACTIVE VERSION;
