用户指南

调整 SQLCODE 映射

缺省情况下,DB2 Connect 将每个 IBM 主机或 AS/400 数据库服务器的 SQLCODE 和记号映射至适当的 DB2 UDB SQLCODE。 下列文件是缺省 SQLCODE 映射的副本:

dcs1dsn.map
映射 DB2 MVS/ESA 版和“DB2 UDB OS/390 版”SQLCODE

dcs1ari.map
映射 DB2 VSE 版和 VM 版 SQLCODE

dcs1qsq.map
映射“DB2 UDB AS/400 版”SQLCODE

基于 OS/2 和 UNIX 的 DB2 系统不需要映射。

若想覆盖缺省 SQLCODE 映射,或者您正在使用一个没有 SQLCODE 映射的主机或 AS/400 数据库服务器(非 IBM 数据库服务器), 则可以复制这些文件的其中一个,并将它用作新的 SQLCODE 映射文件的基础。 通过复制文件而不是直接编辑它, 可以确保您在需要时一直参考原始的 SQLCODE 映射。

在“DCS 目录”或 DCE 路由选择信息对象的参数字符串中指定新的 SQLCODE 映射文件的文件名。 有关更新 DCS 目录的信息,参见更新数据库目录。 有关使用的 DCE 的信息,参见附录 D, 使用 DCE 目录服务

每个映射文件都是 ASCII 文件,它们是通过使用 ASCII 编辑器来创建和编辑的。 在最初安装时,该文件存储在安装路径的 map 目录中。

该文件可以包含下列特殊类型的行:

&&
文件的逻辑开头。 在第一次出现 && 之前的所有行被认为是自由格式的注解,将被忽略。 若在 && 之后文件中没有任何内容,则不执行 SQLCODE 映射。 您还可以用 NOMAP 参数来关闭 SQLCODE 映射,如前面所述。

*
作为一行中的第一个字符,表示该行是注解。

W
作为一行中的唯一字符,表示警告标志应该重新进行映射。 缺省情况下,传送原始的警告标志。W 必须大写。

&& 之后的其他所有行必须为空白或采用下列格式的映射语句:

input_code [、output_code [、token_list]]

input_code 表示下列内容之一:

sqlcode
来自主机或 AS/400 数据库服务器的 SQLCODE。

U
所有未定义的负的 SQLCODE(在此文件中未列示的那些值) 被映射为指定的 output_code。 若在此行中没有指定 output_code, 则使用原始的 SQLCODE。此字符必须大写。

P
所有未定义的正的 SQLCODE(在此文件中未列示的那些值) 被映射为指定的 output_code。 若在此行中没有指定 output_code, 则使用原始的 SQLCODE。此字符必须大写。

ccnn
主机或 AS/400 数据库服务器的 SQLSTATE 类代码。 nn 是下列其中一项:

00
不合格的成功完成

01
警告

02
无数据

21
基数违例

22
数据异常

23
约束违例

24
游标状态无效

26
SQL 语句标识符无效

40
事务回滚

42
存取违例

51
应用程序状态无效

55
对象未处于必需的状态

56
其他 SQL 或产品错误

57
资源不可用或操作员介入

58
系统错误

指定的 output_code 用于映射文件中未显式指定的、 具有此类代码的所有 SQLCODE。 若在此行中没有指定 output_code, 则原始的 SQLCODE 映射至它本身,并且不复制记号。

字符 cc 必须小写。

若在映射文件中多次出现同一 input_code,则使用第一个出现的代码。

output_code 表示输出 SQLCODE。 若没有指定任何值,则使用原始的 SQLCODE。

若您指定了输出代码,则还可以指定下列项之一:

(s)
输入 SQLCODE 及产品 ID(ARI、DSN 或 QSQ)将被放入 SQLCA 信息记号字段中。

原始的 SQLCODE 是返回的唯一记号。 此选项被设计用来处理未定义的 SQLCODE,但 +965 和 -969 除外。 若 +965 或 -969 是 output_code, 则在 SQLCA 的 SQLERRMC 字段中返回的记号列表包括原始 SQLCODE,后接产品标识符,再后接原始记号列表。

字符 s 必须小写。

(token-list)
记号列表,由逗号分开。只指定一个逗号可以跳过特定的记号。 例如,格式 (,t2,,t4) 意味着第一个和第三个输出记号是空的。

每个记号都具有数字格式 (n), 可选择在其前面添加 c, 也可以选择后接 ci。 对记号的解释如下:

c
在此位置的记号的数据类型为 CHAR(这是缺省值)。 若 cn 的前面,则表示是输入记号; 若它在 n 后面,则表示是输出记号。 字符 c 必须小写。

i
在此位置的记号的数据类型为 INTEGER。 若 in 后面,则表示是输出记号。 i 不能在 n 的前面, 因为 IBM 主机或 AS/400 数据库服务器产品仅支持 CHAR 记号。 字符 i 必须小写。

n
用来指示使用了哪些主机或 AS/400 数据库服务器记号的一个或多个数字。 它们是按照输出 SQLCA 中期望放置的次序来排列的。 数字指示主机或 AS/400 数据库服务器记号; 排列指示在 SQLCA 中放置记号时将采用的次序。

例如,主机或 AS/400 数据库服务器可能返回两个记号,即 1 和 2。 若想在输出 SQLCA 中记号 2 出现在记号 1 前面,则应指定 (2,1)。

用句点将多个记号数字连接起来, 可以将多个记号数字组合成一个 CHAR 输出记号。

用逗号来将输出记号隔开。 若在逗号前面没有指定任何记号, 则在 SQLCA 中该位置不包括输出记号。 在输出 SQLCA 中, 在指定的最后一个记号后面出现的任何记号都将被映射为空记号。

图 6显示一个样本 SQLCODE 映射文件。

图 6. SQLCODE 映射文件

&&
  -007    ,   -007   ,   (1)
  -010
  -060    ,   -171   ,   (2)
...
  -204    ,   -204   ,   (c1.2c)
...
  -633    ,   -206   ,   (,c1i)
 
  -30021  ,   -30021 ,   (c1c,c2c)
 
  cc00    ,   +000
...
  U       ,   -969   ,   (s)
  P       ,   +965   ,   (s)

对文件中的每个映射语句的描述如下:

  1. SQLCODE 是从 -007 映射至 -007。 从主机或 AS/400 数据库服务器中接收的第一个输入记号被用作第一个输出记号, 并且缺省为 CHAR。不传送其他记号。
  2. SQLCODE 是从 -010 映射至 -010(未指定输出 SQLCODE)。 没有将任何记号放入输出 SQLCA 中。
  3. SQLCODE 是从 -060 映射至 -171。 从主机或 AS/400 数据库服务器中接收的第一个输入记号被废弃。 在输出 SQLCA 中,第二个记号被用作第一个记号,且它是 CHAR。 在输出 SQLCA 中没有第二个记号。
  4. SQLCODE 是从 -204 映射至 -204。 从主机或 AS/400 数据库服务器中接收的第一个和第二个记号都是 CHAR。 这两个输入记号被组合成一个 CHAR 输出记号, 该输出记号将是 SQLCA 中的第一个输出记号。
  5. SQLCODE 是从 -633 映射至 -206。 从主机或 AS/400 数据库服务器中接收的第一个输入记号为 CHAR。 它被转换为 INTEGER,并且在输出 SQLCA 中被用作第二个记号。 输出 SQLCA 中的第一个记号是空的,因为它是由一个逗号来指示的。
  6. SQLCODE 是从 -30021 映射至 -30021。 从主机或 AS/400 数据库服务器中接收的第一个和第二个输入记号都是 CHAR, 并且将它们用作输出 SQLCA 中的第一个和第二个记号。
  7. 在 SQLCA 中,SQLSTATE 为 00 类的所有 SQLCODE 都将被映射为 SQLCODE +000。
  8. 所有未定义的 SQLCODE 都被映射为 -969。 仅当列示了所有可映射的代码(包括那些完全相同而不需要映射的所有代码), 才应该使用此选项。 (s) 选项指示: 在 SQLCA 的 SQLERRMC 字段中要返回的记号列表包括原始 SQLCODE, 后接发生了错误的产品,再后接原始记号列表。 若不包括 U 项, 则传送所有未列示的代码时,将不进行任何映射。
  9. 所有未定义的正 SQLCODE 都被映射为 +965。 仅当列示了所有可映射的代码(包括那些完全相同而不需要映射的所有代码), 才应该使用此选项。(s) 选项指示: 在 SQLCA 的 SQLERRMC 字段中要返回的记号列表包括原始 SQLCODE, 后接发生了警告的产品,再后接原始记号列表。 若不包括 P 项, 则传送所有未列示的正代码时,将不进行任何映射。


[ 页的顶部 | 上一页 | 下一页 | 目录 | 索引 ]