BIND 命令
BIND 命令调用绑定实用程序,该实用程序用于准备存储在预编译器生成的绑定文件中的 SQL 语句,并创建存储在数据库中的程序包。
作用域
可以从 db2nodes.cfg中的任何数据库分区发出此命令。 它将更新目录数据库分区上的 数据库 目录。 其影响对所有数据库分区可见。
授权
- DBADM 权限
- 如果指定了 EXPLAIN ONLY,则 EXPLAIN 权限或隐式包含 EXPLAIN 的权限就足够了。
- 如果程序包不存在,那么具有下列其中一项特权:
- 如果程序包的模式名不存在,那么数据库上具有 BIND 和 IMPLICIT_SCHEMA 权限。
- 如果程序包的模式名称存在:
- 模式的 SCHEMAADM 权限
- 对模式的 BIND 权限和 CREATEIN 特权
- 如果包存在,那么具有下列其中一项特权:
- 模式的 SCHEMAADM 权限
- 对模式的 ALTERIN 特权
- 对程序包的 BIND 特权
- 对说明表的 INSERT 特权
- DATAACCESS 权限
用户还需要编译应用程序中的任何静态 SQL 语句所需的所有特权。 授予组的特权不用于静态语句的授权检查。
需要的连接
数据库。 如果启用了隐式连接,那么将建立与缺省数据库的连接。
命令语法
- For Db2
- For Db2® on servers other than Linux®, Windows and UNIX
- Notes:
- 1 If the server does not support the DATETIME DEF option, it is mapped to DATETIME ISO.
- 2 The DEGREE option is only supported by DRDA Level 2 Application Servers.
- 3 DRDA defines the EXPLAIN option to have the value YES or NO. If the server does not support the EXPLAIN YES option, the value is mapped to EXPLAIN ALL.
命令参数
- filename
- 指定预编译应用程序时生成的绑定文件的名称,或包含多个绑定文件的名称的列表文件。 绑定文件的扩展名为
.bnd。 可以指定完整路径名。如果指定了列表文件,那么 @ 字符必须是列表文件名的第一个字符。 列表文件可以包含多行绑定文件名。 在同一行上列出的绑定文件必须以加号 (+) 字符分隔,但 + 不能出现在每行上列出的第一个文件的前面,也不能出现在列出的最后一个绑定文件之后。 例如,
是包含以下绑定文件的列表文件:/u/smith/sqllib/bnd/@all.lstmybind1.bnd+mybind.bnd2+mybind3.bnd+ mybind4.bnd+mybind5.bnd+ mybind6.bnd+ mybind7.bnd如果指定不含任何路径的绑定文件名,那么将先在当前目录中搜索该文件。 如果可以找到该文件,那么会捡取该文件,并创建程序包。 如果在当前目录中找不到该文件,那么会从实例或安装路径中自动捡取该文件。
- ACTION
- 指示是可以添加程序包还是可以替换程序包。
- ADD
- 指示指定的包不存在,并且要创建新的包。 如果包存在,则执行停止,并返回诊断错误消息。
- REPLACE
- 指示现有软件包将替换为具有相同软件包名称和创建者的新软件包。 这是 ACTION 选项的缺省值。
- RETAIN
- 指示在替换程序包时是否保留 BIND 和 EXECUTE 权限。 如果程序包的所有权发生更改,那么新所有者会将 BIND 和 EXECUTE 权限授予先前的程序包所有者。
- NO
- 在替换程序包时不保留 BIND 和 EXECUTE 权限。 此值不受 Db2支持。
- YES
- 替换程序包时保留 BIND 和 EXECUTE 权限。 这是缺省值。
- REPLVER version-id
- 替换特定版本的软件包。 版本标识指定要替换的软件包版本。 如果指定的版本不存在,那么将返回错误。 如果未指定 REPLACE 的 REPLVER 选项,并且已存在与正在绑定的软件包的软件包名称,创建者和版本相匹配的软件包,那么将替换该软件包; 否则,将添加新软件包。
- APREUSE
- 指定是否复用静态 SQL 存取方案。 启用此选项后,查询编译器将尝试在绑定期间以及将来隐式和显式重新绑定期间在任何现有程序包中复用语句的存取方案。
- YES
- 查询编译器将尝试复用程序包中语句的存取方案。 如果存在现有程序包,那么查询编译器将尝试对每个可以与新绑定文件中的语句匹配的语句复用存取方案。 要使语句匹配,语句文本必须相同,并且现有包中语句的节号必须与新包中语句的节号相匹配。
- NO
- 查询编译器将不会尝试对包中的语句复用存取方案。 这是缺省设置。
- BLOCKING
- 指定游标的行分块类型。 在分区数据库环境中也支持阻止包含对 LOB 列数据类型的引用的行数据。
- ALL
- 对于使用 FOR READ ONLY 子句指定的游标或未指定为 FOR UPDATE 的游标,将发生分块。
不明确的游标被视为只读。
- NO
- 任何游标都不会发生分块。
有关只读游标和模糊游标的定义,请参阅DECLARE CURSOR 语句。
不明确的游标将被视为可更新的游标。
- UNAMBIG
- 对于使用 FOR READ ONLY 子句指定的游标,会发生分块。
未使用 FOR READ ONLY 或 FOR UPDATE 子句声明且无歧义并且是只读的游标将被阻止。 模糊游标将不会被分块。
不明确的游标将被视为可更新的游标。
- BUSTIMESENSITIVE
- 指示对静态和动态 SQL 语句中的应用程序周期时态表的引用是否受 CURRENT TEMPORAL BUSINESS_TIME 专用寄存器的值影响。
- YES
- 对应用程序周期时态表的引用受 CURRENT TEMPORAL BUSINESS_TIME 专用寄存器的值影响。 此值为缺省值。
- NO
- 对应用程序周期时态表的引用不受 CURRENT TEMPORAL BUSINESS_TIME 专用寄存器的值影响。
- CCSIDG double-ccsid
- 一个整数,指定 CREATE 和 ALTER TABLE SQL 语句中的字符列定义(没有特定的 CCSID 子句)中双字节字符要使用的编码字符集标识符 (CCSID)。 Db2的服务器不支持此选项。 如果未指定此选项,DRDA 服务器将使用内置默认值。
- CCSIDM mixed-ccsid
- 一个整数,用于指定要用于 CREATE 和 ALTER TABLE SQL 语句中字符列定义 (不含特定 CCSID 子句) 中的混合字节字符的编码字符集标识 (CCSID)。 Db2的服务器不支持此选项。 如果未指定此选项,DRDA 服务器将使用内置默认值。
- CCSIDS sbcs-ccsid
- 一个整数,指定用于 CREATE 和 ALTER TABLE SQL 语句中的字符列定义(没有特定的 CCSID 子句)中的单字节字符的编码字符集标识符 (CCSID)。 Db2不支持此选项。 如果未指定此选项,DRDA 服务器将使用内置默认值。
- CHARSUB
- 指定要用于 CREATE 和 ALTER TABLE SQL 语句中的列定义的缺省字符子类型。 此预编译/bind 选项不受 Db2的服务器支持。
- BIT
- 在所有未指定显式子类型的新字符列中使用 FOR BIT DATA SQL 字符子类型。
- DEFAULT
- 在所有未指定显式子类型的新字符列中使用目标内置缺省值。
- MIXED
- 在所有未指定显式子类型的新字符列中使用 FOR MIXED DATA SQL 字符子类型。
- SBCS
- 在所有未指定显式子类型的新字符列中使用 FOR SBCS DATA SQL 字符子类型。
- CLIPKG cli-packages
- 3 到 30 之间的整数,用于指定将 CLI 绑定文件与数据库绑定时要创建的 CLI 大型包的数目。
- CNULREQD
- 此选项与 LANGLEVEL 预编译选项相关。 仅当从 C 或 C++ 应用程序创建绑定文件时,此参数才有效。 Db2的服务器不支持此绑定选项。
- NO
- 该应用程序的编码基于LANGLEVELSAA1关于 C 字符串宿主变量中的空终止符的预编译选项。
- YES
- 该应用程序的编码基于LANGLEVEL米娅关于 C 字符串宿主变量中的空终止符的预编译选项。
- COLLECTION schema-name
- 指定程序包的 128 字节集合标识。 如果未指定,那么将使用处理包的用户的授权标识。
- CONCURRENTACCESSRESOLUTION
- 指定要用于程序包中的语句的并发访问解析。
- USE CURRENTLY COMMITTED
- 指定数据库管理器在更新或删除数据时可以使用当前提交的数据版本进行适用的扫描。 可以跳过正在插入的行。 当有效的隔离级别为 "游标稳定性" 或 "读稳定性" (对于 "读稳定性" ,仅跳过未落实的插入) 时,此子句适用,否则将被忽略。 适用的扫描包括可以在只读语句及非只读语句的执行过程中执行的只读扫描。 注册表变量 DB2_EVALUNCOMMITTED, DB2_SKIPDELETED和 DB2_SKIPINSERTED 的设置不适用于使用当前已落实的扫描。 但是,这些注册表变量的设置仍适用于未使用当前已落实的扫描。
- WAIT FOR OUTCOME
- 指定当在更新或删除过程中迂到数据时,游标稳定性和更高级别的扫描等待落实或回滚。 不会跳过正在插入的行。 注册表变量 DB2_EVALUNCOMMITTED, DB2_SKIPDELETED和 DB2_SKIPINSERTED 的设置不再适用。
- DATETIME
- 指定要使用的日期和时间格式。
- DEF
- 使用与数据库的地域代码关联的日期和时间格式。
- EUR
- 针对欧洲日期和时间格式使用 IBM 标准。
- ISO
- 使用国际标准组织的日期和时间格式。
- JIS
- 使用日本工业标准的日期和时间格式。
- LOC
- 使用与数据库地域代码关联的本地格式的日期和时间格式。
- USA
- 针对 U.S使用 IBM 标准。日期和时间格式。
- DBPROTOCOL
- 指定在连接到由三部分名称语句标识的远程站点时要使用的协议。 仅由 Db2 for z/OS 只有 有关受支持选项值的列表,请参阅 Db2 for z/OS的文档。
- DEC
- 指定要在十进制算术运算中使用的最大精度。 此预编译/bind 选项不受 Db2的服务器支持。 如果未指定此选项,那么 DRDA 服务器将使用内置缺省值。
- 15
- 在十进制算术运算中使用 15 位精度。
- 31
- 在十进制算术运算中使用 31 位精度。
- DECDEL
- 指定是将句点 (.) 还是逗号 (,) 用作十进制和浮点文字中的小数点指示符。 此预编译/bind 选项不受 Db2的服务器支持。 如果未指定此选项,那么 DRDA 服务器将使用内置缺省值。
- COMMA
- 使用逗号 (,) 作为小数点指示符。
- PERIOD
- 使用句点 (.) 作为小数点指示符。
- DEGREE
- 指定在 SMP 系统中执行静态 SQL 语句的并行度。 此选项不会影响 CREATE INDEX 并行性。
- 1
- 语句的执行将不使用并行性。
- degree-of-parallelism
- 指定执行语句的并行程度,数值在 2 到 32 767 之间(含 2)。
- ANY
- 指定语句的执行可能涉及使用 数据库管理器所确定的等级的并行性。
- DYNAMICRULES
- 定义运行时应用于动态 SQL 的规则,以用于初始设置授权标识值和未限定对象引用的隐式限定
- RUN
- 指定执行程序包的用户的授权标识将用于动态 SQL 语句的授权检查。 授权标识还将用作动态 SQL 语句中隐式限定非限定对象引用的缺省包限定符。 这是缺省值。
- BIND
- 指定将在运行时使用应用于静态 SQL 以进行授权和限定的所有规则。 即,程序包所有者的授权标识将用于动态 SQL 语句的授权检查,缺省程序包限定符将用于动态 SQL 语句中未限定对象引用的隐式限定。
- DEFINERUN
- 如果在例程上下文中使用该程序包,那么例程定义者的授权标识将用于授权检查,并用于在例程的动态 SQL 语句中隐式限定未限定的对象引用。
如果该程序包用作独立应用程序,那么将处理动态 SQL 语句,就像该程序包与 DYNAMICRULES RUN绑定一样。
- DEFINEBIND
- 如果在例程上下文中使用该程序包,那么例程定义者的授权标识将用于授权检查,并用于在例程的动态 SQL 语句中隐式限定未限定的对象引用。
如果该程序包用作独立应用程序,那么将处理动态 SQL 语句,就像该程序包与 DYNAMICRULES BIND绑定一样。
- INVOKERUN
- 如果在例程上下文中使用该程序包,那么调用例程时生效的当前语句授权标识将用于动态 SQL 语句的授权检查以及该例程内动态 SQL 语句中未限定对象引用的隐式限定。
如果该程序包用作独立应用程序,那么将处理动态 SQL 语句,就像该程序包与 DYNAMICRULES RUN绑定一样。
- INVOKEBIND
- 如果在例程上下文中使用该程序包,那么调用例程时生效的当前语句授权标识将用于动态 SQL 语句的授权检查以及该例程内动态 SQL 语句中未限定对象引用的隐式限定。
如果该程序包用作独立应用程序,那么将处理动态 SQL 语句,就像该程序包与 DYNAMICRULES BIND绑定一样。
由于动态 SQL 语句将在程序包中使用程序包所有者的授权标识来显示绑定行为,因此程序包的绑定程序不应向其授予程序包用户不应接收的任何权限。 类似地,在定义表现出定义行为的例程时,例程的定义者不应被授予包的用户不应获得的任何权限,因为动态语句将使用例程定义者的授权 ID。
以下动态预编译 SQL 语句不能在未与 DYNAMICRULES RUN绑定的程序包中使用 :GRANT , REVOKE , ALTER , CREATE , DROP , COMMENT ON , RENAME , SET INTEGRITY 和 SET EVENT MONITOR STATE。
- ENCODING
- 指定方案或包中静态语句中所有主变量的编码。 仅受 Db2 for OS/390® 支持。 有关受支持选项值的列表,请参阅 Db2 for OS/390的文档。
- EXPLAIN
- 将有关为程序包中的每个 SQL 语句选择的存取方案的信息存储在 Explain 表中。
- NO
- 将不会捕获说明信息。
- YES
- 在静态语句的 prep/bind 时间和增量绑定语句的运行时,将使用有关所选存取方案的信息填充说明表。
如果该程序包将用于例程,并且该程序包包含增量绑定语句,那么必须将该例程定义为 MODISQL DATA。 如果未执行此操作,那么程序包中的增量绑定语句将导致运行时错误 (SQLSTATE 42985)。
- REOPT
- 每个可重新优化的增量绑定 SQL 语句的说明信息将在运行时放在说明表中。 此外,还会在运行时为可重新优化的动态 SQL 语句收集说明信息,即使 CURRENT EXPLAIN MODE 寄存器设置为 NO 也是如此。
如果要将该程序包用于例程,那么必须将该例程定义为 MODISQL DATA ,否则该程序包中的增量绑定和动态语句将导致运行时错误 (SQLSTATE 42985)。
- ONLY
- ONLY选项允许你解释语句,但没有执行这些语句的权限。 已填充说明表,但未创建任何持久包。 如果在绑定过程中迂到具有相同名称和版本的现有程序包,那么即使指定了 ACTION REPLACE,也不会删除或替换现有程序包。 如果在填充说明表期间发生错误,那么不会为返回该错误的语句以及后跟该错误的任何语句添加说明信息。
- ALL
- 每个合格静态 SQL 语句的说明信息将在准备/bind 时间放在 Explain 表中。 每个符合条件的增量绑定 SQL 语句的说明信息将在运行时放在说明表中。 此外,将在运行时为符合条件的动态 SQL 语句收集说明信息,即使 CURRENT EXPLAIN MODE 寄存器设置为 NO 也是如此。
如果要将该程序包用于例程,那么必须将该例程定义为 MODISQL DATA ,否则该程序包中的增量绑定和动态语句将导致运行时错误 (SQLSTATE 42985)。
- EXPLSNAP
- 将“说明快照”信息存储在“说明”表中。
- NO
- 将不会捕获说明快照。
- YES
- 每个符合条件的静态 SQL 语句的说明快照将放置在 Explain 表中的预/bind 时间 (对于静态语句) 和运行时 (对于增量绑定语句)。
如果要将该程序包用于例程,并且该程序包包含增量绑定语句,那么必须将该例程定义为 MODISQL DATA ,否则该程序包中的增量绑定语句将导致运行时错误 (SQLSTATE 42985)。
- REOPT
- 每个可重新优化的增量绑定 SQL 语句的说明快照信息将在运行时放在说明表中。 此外,还会在运行时为可重新优化的动态 SQL 语句收集说明快照信息,即使 CURRENT EXPLAIN SNAPSHOT 寄存器设置为 NO 也是如此。
如果要将该程序包用于例程,那么必须将该例程定义为 MODISQL DATA ,否则该程序包中的增量绑定和动态语句将导致运行时错误 (SQLSTATE 42985)。
- ALL
- 每个符合条件的静态 SQL 语句的说明快照将在准备/bind 时间放置在 Explain 表中。 每个符合条件的增量绑定 SQL 语句的说明快照信息将在运行时放置在 Explain 表中。 此外,将在运行时为符合条件的动态 SQL 语句收集说明快照信息,即使 CURRENT EXPLAIN SNAPSHOT 寄存器设置为
NO也是如此。如果要将该程序包用于例程,那么该例程必须定义为 MODISQL DATA ,否则该程序包中的增量绑定和动态语句将导致运行时错误 (SQLSTATE 42985)。
- EXTENDEDINDICATOR
- 允许在执行关联的计划或包期间识别扩展指示符变量值。
- NO
- 无法识别扩展指示符变量值。 指示符变量是正常指示符变量; 负指示符变量值表示空,正或零值表示非空。 这是缺省条件。
- YES
- 可识别扩展指示符变量值。 使用任何无法识别的指示符变量值,或者在不受支持的位置中使用缺省或未分配的基于指示符变量的值将导致 Db2 数据库管理器在执行绑定语句期间生成错误消息。
- FEDERATED
- 指定程序包中的静态 SQL 语句是引用昵称还是联合视图。 如果未指定此选项,并且程序包中的静态 SQL 语句引用昵称或联合视图,那么将返回警告并创建程序包。
- NO
- 程序包的静态 SQL 语句中未引用昵称或联合视图。 如果在此程序包的准备或绑定阶段期间在静态 SQL 语句中迂到昵称或联合视图,那么将返回错误,并且 不会 创建程序包。
- YES
- 可以在程序包的静态 SQL 语句中引用昵称或联合视图。 如果在程序包的准备或绑定期间在静态 SQL 语句中未迂到昵称或联合视图,那么不会返回任何错误或警告,并且会创建程序包。
- FEDERATED_ASYNCHRONY
- 指定联合服务器在使用嵌入式 SQL 的程序的存取方案中支持的异步表队列 (ATQ) 的最大数目。
- ANY
- 优化器确定存取方案的 ATQ 数。 优化器将一个 ATQ 指定给方案中的所有合格 SHIP 或远程下推运算符。 为 DB2_MAX_ASYNC_REQUESTS_PER_QUERY 服务器选项指定的值限制异步请求数。
- number_of_atqs_in_the_plan
- 计划中的 ATQ 数。 指定 0 到 32767范围内的数字。
- FUNCPATH
- 指定要用于解析静态 SQL 中用户定义的单值类型和函数的函数路径。 如果未指定此选项,那么缺省函数路径为 "SYSIBM" , "SYSFUN" 和 USER ,其中 USER 是 USER 专用寄存器的值。
- schema-name
- 普通或定界 SQL 标识,用于标识应用程序服务器上存在的模式。 不会在预编译时或绑定时验证模式是否存在。 同一模式在函数路径中不能出现多次。 不能为函数路径指定模式名SY溅射。 可以指定的模式数受生成的函数路径长度限制,该长度不能超过 2048 个字节。 不需要显式指定模式 SYSIBM; 如果未包含在函数路径中,那么将隐式假定它是第一个模式。
- GENERIC "string"
- 支持使用目标服务器支持但未在 BIND PACKAGE 或 REBIND PACKAGE 命令中预定义的绑定选项来绑定包。 请勿使用 GENERIC 绑定选项来指定在 BIND 或 PRECOMPILE 命令语法中预定义的绑定选项。 例如,请勿在 GENERIC 绑定选项中指定预定义的绑定选项,例如 KEEPDYNAMIC 。 GENERIC 绑定选项的语法如下所示:
generic "option1 value1 option2 value2 ..."必须使用一个或多个空格分隔每个选项和值。 例如,可以使用以下 GENERIC 绑定选项语法将包与 OPT1, OPT2和 OPT3 选项值绑定:generic "opt1 value1 opt2 value2 opt3 value3"字符串的最大长度为 4096 字节。 字符串中每个选项名称的最大长度为 255 个字节。
客户机将 BIND 命令传递到 Db2 服务器,而不进行任何客户机验证。 Db2 服务器处理 BIND 命令并返回相应的消息。
在 V 10.5 修订包 2 和更高版本中,当您连接到 Db2 for z/OS V11 和更高版本的服务器时,可以使用 BIND 命令的 GENERIC 选项指定应用程序兼容性专用寄存器设置 (APPLCOMPAT)。
有关 Db2 for z/OS 服务器支持的 GENERIC 选项的列表,请参阅
来自 Db2 客户机的 Db2 for z/OS 绑定选项的规范
。有关 Db2 for IBM i 服务器支持的通用选项列表,请参阅《
不同客户端如何覆盖 NLSS 排序序列、系统命名和独立日期/时间格式等软件包选项
》中的表 1。 - GRANT
- 注意:如果指定了多个 "GRANT、"GRANT_GROUP、"GRANT_USER和 "GRANT_ROLE选项,则只执行最后指定的选项。
- authid
- 将 EXECUTE 和 BIND 特权授予指定的用户名,角色名称或组标识。 当未提供 USER , GROUP 或 ROLE 来指定 GRANT 语句的被授予者类型时, SQL GRANT 语句及其规则用于确定 authid 的类型。 有关规则,请参阅 GRANT (Role) 语句。
- PUBLIC
- 向 PUBLIC 授予 EXECUTE 和 BIND 特权。
- GRANT_GROUP group-name
- 将 EXECUTE 和 BIND 特权授予指定的组名。
- GRANT_USER user-name
- 将 EXECUTE 和 BIND 特权授予指定的用户名。
- GRANT_ROLE role-name
- 将 EXECUTE 和 BIND 特权授予指定的角色名称。
- INSERT
- 允许针对 Db2 Enterprise Server Edition 服务器预编译或绑定的程序请求缓冲数据插入以提高性能。
- BUF
- 指定应该缓冲来自应用程序的插入。
- DEF
- 指定不应缓冲来自应用程序的插入。
- ISOLATION
- 确定与此程序包绑定的程序可与其他执行程序的影响相隔离的程度。
- CS
- 将 "游标稳定性" 指定为隔离级别。
- NC
- 不落实。 指定不使用落实控制。 Db2不支持此隔离级别。
- RR
- 指定 "可重复读" 作为隔离级别。
- RS
- 指定 "读稳定性" 作为隔离级别。 "读稳定性" 可确保程序包中 SQL 语句的执行与应用程序读取和更改的行的其他应用程序进程隔离。
- UR
- 指定 "未落实的读" 作为隔离级别。
- IMMEDWRITE
- 指示是否将对组缓冲池从属页集或数据库分区的更新执行立即写操作。 仅受 Db2 for OS/390 支持。 有关受支持选项值的列表,请参阅 Db2 for OS/390的文档。
- KEEPDYNAMIC
此参数指定在落实点之后是否保留动态 SQL 语句。
有关 Db2 for z/OS支持的选项值的列表,请参阅 Db2 for z/OS 文档。
从 Db2 V 9.8 修订包 2 开始,您可以修改程序包的 KEEPDYNAMIC 绑定选项的值,而不需要全新的绑定操作,从而避免不必要的重新编译,直到下一个绑定操作发生为止。 KEEPDYNAMIC 绑定选项控制在 SQL 上下文中保留与预编译语句相关联的语句文本和部分的时间长度,指定是在 COMMIT 还是 ROLLBACK 之后保留动态 SQL 语句。
- YES
指示 SQL 上下文无限期地保留与已准备语句关联的语句文本和部分。 将跨事务保留动态 SQL 语句。 缺省情况下,所有与 KEEPDYNAMIC YES 绑定的程序包都与现有程序包高速缓存行为兼容。
- No
指示 SQL 上下文在每个工作单元结束时移除与已准备语句关联的语句文本和部分。 在 COMMIT 或 ROLLBACK 操作期间,将从 SQL 上下文中除去与 KEEPDYNAMIC NO 绑定的程序包中准备的不活动动态 SQL 语句。 必须在新事务中再次准备这些语句。 客户机,驱动程序或应用程序需要准备它想要再次在新的工作单元中复用的任何动态 SQL 语句。 如果软件包由远程应用程序执行,则在事务结束时,准备语句的可执行版本会与应用程序 SQL 上下文分离。
必须保留活动的动态 SQL 语句,直到它们处于不活动状态的下一个 COMMIT 或 ROLLBACK 操作为止。 以下是动态 SQL 语句可以在事务边界处于活动状态的一些情况:- 使用 WITH HOLD 选项声明的游标在落实点打开。
- 动态 SQL 语句正在执行 COMMIT 或 ROLLBACK 操作。
- 动态 SQL 语句调用正在执行 COMMIT 或 ROLLBACK 操作的存储过程或用户定义的函数。
- MESSAGES message-file
- 指定警告,错误和完成状态消息的目标。 无论绑定是否成功,都将创建一个消息文件。 如果未指定消息文件名,那么会将这些消息写入标准输出。 如果未指定该文件的完整路径,那么将使用当前目录。 如果指定了现有文件的名称,那么将覆盖该文件的内容。
- OPTHINT
- 控制查询优化提示是否用于静态 SQL。 仅受 Db2 for OS/390 支持。 有关受支持选项值的列表,请参阅 Db2 for OS/390的文档。
- OPTPROFILE optimization-profile-name
- 指定要用于程序包中所有静态语句的现有优化概要文件的名称。 选项的缺省值为空字符串。 该值也作为动态准备当前 OPTIMIZATION PROFILE 专用寄存器为空的 DML 语句的缺省值应用。 如果指定的名称是未限定的,那么它是 SQL 标识,由 QUALIFIER 绑定选项隐式限定。
BIND 命令不会处理优化文件,但仅验证名称在语法上是否有效。 因此,如果优化概要文件不存在或无效,那么在使用该优化概要文件优化 DML 语句之前,不会出现 SQL0437W 警告,原因码为 13。
- OS400NAMING
- 指定访问Db2forSystem i数据时使用的命名选项。 仅受 Db2 for System i 支持。 有关受支持选项值的列表,请参阅 Db2 for IBM i的文档。
- OWNER authorization-id
- 指定包所有者的 128 字节授权标识。 所有者必须具有执行程序包中包含的 SQL 语句所必需的特权。 只有具有 DBADM 权限的用户才能指定非用户标识的授权标识。 缺省值是预编译/bind 进程的调用者的授权标识。 SYSIBM , SYSCAT 和 SYSSTAT 不是此选项的有效值。 authorization-id 必须是用户。 无法使用 OWNER 选项指定角色或组。
- PATH
- 指定要用于解析静态 SQL 中用户定义的单值类型和函数的函数路径。 如果未指定此选项,那么缺省函数路径为 "SYSIBM" , "SYSFUN" 和 USER ,其中 USER 是 USER 专用寄存器的值。
- schema-name
- 普通或定界 SQL 标识,用于标识应用程序服务器上存在的模式。 不会在预编译时或绑定时验证模式是否存在。
- QUALIFIER qualifier-name
- 为包中包含的非限定对象提供 128 字节隐式限定符。 缺省值是所有者的授权标识,无论是否显式指定了 OWNER 。
- QUERYOPT optimization-level
- 指示程序包中包含的所有静态 SQL 语句所需的优化级别。 缺省值为 5。 SET CURRENT QUERY OPTIMIZATION 语句描述可用优化级别的完整范围。
- RELEASE
- 指示是在每个 COMMIT 点释放资源,还是在应用程序终止时释放资源。 Db2不支持此 DRDA 预编译/bind 选项。 对于 Db2 for z/OS V10 服务器或更高版本,缺省值为 DEALLOCATE。
- COMMIT
- 在每个 COMMIT 点释放资源。 用于动态 SQL 语句。
- DEALLOCATE
- 仅在应用程序终止时释放资源。
- SORTSEQ
- 指定要在 System i上使用的排序顺序表。 仅受 Db2 for IBM i 支持。 有关受支持选项值的列表,请参阅 Db2 for System i的文档。
- SQLERROR
- 指示在遇到错误时是创建程序包还是创建绑定文件。
- CHECK
- 指定目标系统对正在绑定的 SQL 语句执行所有语法和语义检查。 将不会在此过程中创建包。 如果在绑定时迂到具有相同名称和版本的现有程序包,那么即使指定了 ACTION REPLACE ,也不会删除或替换现有程序包。
- CONTINUE
- 创建程序包,即使在绑定 SQL 语句时发生错误也是如此。 如果还指定了 VALIDATE RUN ,那么由于授权或存在原因而未能绑定的那些语句可以在执行时以递增方式进行绑定。 任何在运行时执行它们的尝试都会产生错误(SQLCODE -525,SQLSTATE 51015)。
- NOPACKAGE
- 如果迂到错误,那么不会创建程序包或绑定文件。
- REOPT
- 指定是否让 Db2 在运行时使用主变量,参数标记,全局变量和专用寄存器的值来确定访问路径。 有效值为:
- NONE
- 将不会使用实际值来优化包含主变量,参数标记,全局变量或专用寄存器的给定 SQL 语句的访问路径。 将使用这些变量的缺省估算值,并且将对计划进行高速缓存,随后将使用此估算值。 这是缺省值。
- ONCE
- 在首次执行查询时,将使用主机变量、参数标记、全局变量或特殊寄存器的实际值优化给定 SQL 语句的访问路径。 此计划将进行高速缓存并随后使用。
- ALWAYS
- 每次执行查询时,都会使用已知的主机变量、参数标记、全局变量或特殊寄存器的值,对给定 SQL 语句的访问路径进行编译和重新优化。
- REOPT | NOREOPT VARS
- 这些选项已替换为 REOPT ALWAYS 和 REOPT NONE; 但是,仍支持这些选项以实现先前的兼容性。 指定是否让 Db2 在运行时使用主变量,全局变量,参数标记和专用寄存器的值来确定访问路径。 仅受 Db2 for OS/390 支持。 有关受支持选项值的列表,请参阅 Db2 for OS/390的文档。
- SQLWARN
- 指示是从动态 SQL 语句的编译 (通过 PREPARE 或 EXECUTE IMMEDIATE) 返回警告,还是从描述处理 (通过 PREPARE ...INTO 或 DESCRIBE)。
- NO
- 不会从 SQL 编译器返回警告。
- YES
- 将从 SQL 编译器返回警告。
- STATICREADONLY
- 确定是将静态游标视为只读还是不敏感。
- NO
- 在给定语句文本和 LANGLEVEL 预编译选项的设置的情况下,所有静态游标都将采用通常生成的属性。 这是缺省值。
- YES
- 不包含 FOR UPDATE 或 FOR READ ONLY 子句的任何静态游标都将被视为 READ ONLY。
- INSENSITIVE
- 不包含 FOR UPDATE 子句的任何静态游标都将被视为只读和不敏感。
- STRDEL
- 指定是撇号 (') 还是双引号 (") 将用作 SQL 语句中的字符串定界符。 此预编译/bind 选项不受 Db2的服务器支持。 如果未指定此选项,那么 DRDA 服务器将使用内置缺省值。
- APOSTROPHE
- 使用撇号 (') 作为字符串定界符。
- QUOTE
- 使用双引号 (") 作为字符串定界符。
- STRING_UNITS
- 指定在静态 SQL 语句中使用不带显式字符串单元的字符和图形数据类型时的字符串单元。 缺省值基于数据库的 string_units 数据库配置参数设置。
- SYSTEM
- 在 Unicode 数据库中,此设置具有以下效果:
- 在未指定 CODEUNITS32 关键字的情况下定义的 CHAR , VARCHAR 和 CLOB 数据类型将缺省为 OCTETS。
- 在未指定 CODEUNITS32 关键字的情况下定义的 GRAPHIC , VARGRAPHIC 和 DBCLOB 数据类型将缺省为 CODEUNITS16。
- 在未指定 CODEUNITS32 关键字的情况下定义的 CHAR , VARCHAR 和 CLOB 数据类型将缺省为 OCTETS。
- GRAPHIC , VARGRAPHIC 和 DBCLOB 数据类型具有双字节的隐式字符串单元。
- CODEUNITS32
- 此设置仅对 Unicode 数据库有效,并且具有以下效果:
- 在未指定 BYTE 或 OCTETS 关键字的情况下定义的 CHAR , VARCHAR 和 CLOB 数据类型将缺省为 CODEUNITS32。
- 在未指定 CODEUNITS16 关键字的情况下定义的 GRAPHIC , VARGRAPHIC 和 DBCLOB 数据类型将缺省为 CODEUNITS32。
- SYSTIMESENSITIVE
- 指示对静态和动态 SQL 语句中的系统周期时态表的引用是否受 CURRENT TEMPORAL SYSTEM_TIME 专用寄存器的值影响。
- YES
- 对系统周期时态表的引用会受CURRENT TEMPORAL SYSTEM_TIME专用寄存器的值影响。 此值为缺省值。
- NO
- 对系统周期时态表的引用不会受CURRENT TEMPORAL SYSTEM_TIME专用寄存器的值影响。
- TEXT label
- 程序包的描述。 最大长度为 255 个字符。 缺省值为空白。 此预编译/bind 选项不受 Db2的服务器支持。
- TRANSFORM GROUP
- 指定要由静态 SQL 语句用于与主机程序交换用户定义的结构化类型值的变换组名。 此变换组不用于动态 SQL 语句,也不用于与外部函数或方法交换参数和结果。
- groupname
- 长度最多为 18 个字节的 SQL 标识。 组名不能包含限定符前缀,并且不能以前缀 SYS 开头,因为这是保留给数据库使用的。 在与主变量交互的静态 SQL 语句中,要用于交换结构化类型的值的变换组的名称如下所示:
- TRANSFORM GROUP 绑定选项中的组名 (如果有)
- TRANSFORM GROUP prep 选项中在原始预编译时指定的组名 (如果有)
- DB2_PROGRAM 组 (如果存在组名为 DB2_PROGRAM 的给定类型的变换)
- 如果先前列示的条件都不存在,那么不使用变换组。
在绑定静态 SQL 语句期间,可能会发生以下错误:- SQLCODE yyyyy, SQLSTATE xxxxx: 需要变换,但未选择静态变换组。
- SQLCODE yyyyy, SQLSTATE xxxxx: 所选变换组不包含需要交换的数据类型的必需变换 (对于输入变量为 TO SQL ,对于输出变量为 FROM SQL)。
- SQLCODE yyyyy, SQLSTATE xxxxx: FROM SQL 变换的结果类型与输出变量的类型不兼容,或者 TO SQL 变换的参数类型与输入变量的类型不兼容。
- VALIDATE
- 确定 数据库管理器 何时检查授权错误和对象未找到错误。 包所有者授权标识用于有效性检验。
- BIND
- 在预编译/bind 时执行验证。 如果所有对象都不存在,或者未保留所有权限,那么将生成错误消息。 如果指定了 SQLERROR CONTINUE ,那么将不顾错误消息生成包/bind 文件,但出错的语句不可执行。
- RUN
- 在绑定时尝试验证。 如果所有对象都存在,并且拥有所有权限,那么在执行时不会执行进一步检查。
如果所有对象都不存在,或者在预编译/bind 时未拥有所有权限,那么将生成警告消息,并成功绑定程序包,而不考虑 SQLERROR CONTINUE 选项设置。 但是,对于在预编译/bind 过程中失败的 SQL 语句,可以在执行时重新执行权限检查和存在检查。
示例
db2 bind myapp.bnd绑定过程产生的任何消息都将发送到标准输出。
使用说明
使用 REOPT 选项与指定的 ONCE 或 ALWAYS 值绑定程序包可能会更改静态和动态语句编译和性能。
绑定可以作为应用程序源文件的预编译过程的一部分完成,也可以作为稍后的单独步骤完成。 当作为单独的进程执行绑定时,请使用 BIND 。
用于创建程序包的名称存储在绑定文件中,并且基于从中生成程序包的源文件名 (将废弃现有路径或扩展)。 例如,名为 myapp.sql 的预编译源文件会生成名为 myapp.bnd 的缺省绑定文件和缺省包名 MYAPP。 但是,可以使用 BINDFILE 和 PACKAGE 选项在预编译时覆盖绑定文件名和包名。
使用尚不存在的模式名称绑定包会导致隐式创建该模式。 模式所有者是 SYSIBM。 该模式上的 CREATEIN 特权会授予 PUBLIC。
BIND在启动的事务中执行。 执行绑定后,"BIND会发出 COMMIT 或 ROLLBACK 来终止当前事务并启动另一个事务。
如果发生致命错误或超过 100 个错误,那么绑定将停止。 如果发生致命错误,那么该实用程序将停止绑定,尝试关闭所有文件,并废弃该程序包。
- BIND 选项 OWNER 的隐式或显式值将用于动态 SQL 语句的授权检查。
- BIND 选项 QUALIFIER 的隐式或显式值将用作动态 SQL 语句中未限定对象的隐式限定符。
- 专用寄存器 CURRENT SCHEMA 的值对限定没有影响。
如果在单个连接期间引用了多个包,那么由这些包准备的所有动态 SQL 语句都将表现出 DYNAMICRULES 选项为该特定包及其使用环境指定的行为。
参数显示在SQL0020W消息被正确地记录为错误,并按照消息所示被忽略。
如果发现 SQL 语句有误,并且BIND选项SQLERROR继续已指定,则该语句被标记为无效。 为了更改 SQL 语句的状态,必须发出另一个 BIND 。 隐式和显式重新绑定不会更改无效语句的状态。 在包装中VALIDATE跑步,语句可以在隐式和显式重新绑定中从静态绑定更改为增量绑定或从增量绑定更改为静态绑定,具体取决于重新绑定期间是否存在对象或权限问题。
授予用于绑定包的授权标识符的角色的权限(OWNER在绑定包时,需要考虑将包绑定到其他包类型(例如,.bind 选项)或 PUBLIC 选项。 将不使用通过组获取的角色,其中用于绑定包的授权标识是成员。
对于嵌入式 SQL 程序,如果未显式指定绑定选项,那么将使用 federated_async 配置参数来绑定程序包中的静态语句。 如果显式指定了 FEDERATED_ASYNCHRONY 绑定选项,那么该值将用于绑定程序包,并且也是专用寄存器的初始值。 否则,数据库管理器配置参数的值将用作专用寄存器的初始值。 FEDERATED_ASYNCHRONY 绑定选项仅在显式设置时影响动态 SQL。
FEDERATED_ASYNCHRONY 绑定选项的值记录在 SYSCAT.PACKAGES 目录表。 未显式指定绑定选项时,将使用 federated_async 配置参数的值,并且目录将显示 FEDERATED_ASYNCHRONY 列的值 -2 。
如果在绑定程序包时未显式指定 FEDERATED_ASYNCHRONY 绑定选项,并且此程序包已隐式或显式重新绑定,那么将使用 federated_async 配置参数的当前值来重新绑定程序包。
如果NULLID软件包不存在、过期或未绑定,正在运行BIND在任何其他集合上导致隐式重新绑定的NULLID包裹。 绑定具有非默认集合 ID 的软件包需要显式绑定 "NULLID软件包。
