用户指南

在分布式环境中进行程序设计

DB2 Connect 允许应用程序存取 System/390 和 AS/400 服务器上的 DB2 数据库中的数据。 例如,在 Windows 上运行的应用程序可以存取 DB2 通用数据库 OS/390 版数据库中的数据。可以创建新的应用程序, 或者修改现存的应用程序以在主机或 AS/400 环境中运行。还可以在一个环境中开发应用程序, 并将它们移植至另一个环境。

DB2 Connect 允许您将下列 API 配合主机数据库产品(如 DB2 通用数据库 OS/390 版)使用(条件是该主机数据库产品必须支持该项):

某些 SQL 语句在不同的关系数据库产品中是不同的。 您可能会遇到这样的 SQL 语句:

前两个类别中的 SQL 语句很容易移植, 但是,第三个类别中的那些 SQL 语句将首先需要更改。通常, “数据定义语言”(DDL) 中的 SQL 语句不如“数据处理语言” (DML) 中的 SQL 语句那么容易移植。

DB2 Connect 接受某些不受 DB2 通用数据库支持的 SQL 语句。 DB2 Connect 将这些语句传送至主机或 AS/400 服务器。有关不同平台上的限制的信息(例如,最大列长度),参考 SQL Reference

若从 OS/390 或 VSE 中移动 CICS 应用程序以在另一个 CICS 产品 (如 CICS AIX 版)下运行,则该应用程序还可使用 DB2 Connect 来存取 OS/390 或 VSE 数据库。 有关细节,参考 CICS/6000 Application Programming GuideCICS Customization and Operation 手册。

当在主机或 AS/400 环境中进行程序设计时,应考虑下列特定因素:

使用数据定义语言 (DDL)

在不同的 IBM 数据库产品中,DDL 语句是不同的, 因为在不同的系统上存储器的处理方式是不同的。在主机或 AS/400 服务器系统上, 在设计数据库与发出 CREATE TABLE 语句之间可以有几个步骤。例如, 一系列语句可以将逻辑对象的设计转换为这些对象在存储器中的物理表示。

当预编译主机或 AS/400 服务器数据库时, 预编译器将许多这样的 DDL 语句传送至主机或 AS/400 服务器。 以上语句将不会对应用程序正在其中运行的系统上的数据库进行预编译。 例如,在 OS/2 应用程序中,CREATE STORGROUP 语句将成功地对 DB2 通用数据库 OS/390 版数据库而不是对“DB2 OS/2 版”数据库进行预编译。

使用数据处理语言 (DML)

通常,DML 语句是很容易移植的。在各个 IBM 数据库产品中, SELECT、INSERT、UPDATE 和 DELETE 语句是相似的。 大多数应用程序主要使用 DML SQL 语句,这些语句是受 DB2 Connect 程序支持的。

数字数据类型

当数字数据被传送至 DB2 通用数据库时,数据类型可能会有所变化。 数字和区位十进制 SQLTYPE(受 DB2 通用数据库 AS/400 版支持)被转换为固定(压缩)十进制 SQLTYPE。

混合字节数据

混合字节数据可在同一列中包括扩展 UNIX 代码 (EUC) 字符集、 双字节字符集 (DBCS) 和单字节字符集 (SBCS) 中的字符。 在存储 EBCDIC 格式数据的系统上(OS/390、OS/400、VSE 和 VM), 移出和移入字符分别标记双字节数据的开始和结尾。 在存储 ASCII 格式数据的系统上(例如,OS/2 和 UNIX), 不需要移入和移出字符。

若应用程序将混合字节数据从 ASCII 系统传送至 EBCDIC 系统, 则务必确保有足够的空间用于移位字符。每次将 SBCS 数据转换为 DBCS 数据时, 数据长度都将增加 2 个字节。为了获得更好的可移植性, 在使用混合字节数据的应用程序中使用变长字符串。

长型字段

在不同的系统上,长型字段(字符串长于 254 个字符)的处理方式是不同的。 主机或 AS/400 服务器可能仅支持一个标量函数子集用于长型字段;例如, DB2 通用数据库 OS/390 版只允许 LENGTHSUBSTR 函数用于长型字段。 另外,对于某些 SQL 语句,主机或 AS/400 服务器可能需要进行不同的处理; 例如,DB2 VSE 版和 VM 版 要求:对于 INSERT 语句,仅应使用主变量、SQLDA 或 NULL 值。

大对象 (LOB) 数据类型

LOB 数据类型受 DB2 Connect 支持。

用户定义类型 (UDT)

仅用户定义单值类型受 DB2 Connect 支持。抽象数据类型不受支持。

ROWID 数据类型

对于位数据,ROWID 数据类型被 DB2 Connect 作为 VARCHAR 来处理。

64 位整数 (BIGINT) 数据类型

DB2 Connect 支持八字节(64 位)整数。BIGINT 内部数据类型用来提供对非常大型的数据库的基本支持,同时还保持数据精度。

使用数据控制语言 (DCL)

每个 IBM 关系数据库管理系统对 GRANT 和 REVOKE SQL 语句提供不同级别的粒度。 检查产品特定的出版物,以验证是否对每个数据库管理系统使用了适当的 SQL 语句。

连接和断开连接

DB2 Connect 支持 CONNECT TO 和 CONNECT RESET 版本的 CONNECT 语句, 以及不带任何参数的 CONNECT。若应用程序调用 SQL 语句时没有首先执行显式 CONNECT TO 语句, 则对缺省应用程序服务器(若定义了一个的话)执行隐式连接。

当连接数据库时,在 SQLCA 的 SQLERRP 字段中返回标识关系数据库管理系统的信息。 若应用程序服务器是 IBM 关系数据库,则 SQLERRP 的前三个字节包含下列各项之一:

DSN
DB2 通用数据库 OS/390 版

ARI
DB2 VSE 版和 VM 版

QSQ
DB2 通用数据库 AS/400 版

SQL
DB2 通用数据库.

若在使用 DB2 Connect 时发出 CONNECT TO 或空 CONNECT 语句, 则在 SQLCA 的 SQLERRMC 字段中返回的国家代码或地区记号为空白; 在代码页或代码集记号中返回应用程序服务器的 CCSID。

可以通过使用 CONNECT RESET 语句(对于类型 1 连接)、 RELEASE 和 COMMIT 语句(对于类型 2 连接),或 DISCONNECT 语句 (对于连接类型 1 和类型 2 中的任一类型,但不在 TP 监控程序环境中) 来显式地断开连接。

若没有显式地断开连接,而应用程序正常结束, 则 DB2 Connect 将隐式地落实结果数据。
注意:应用程序可能会接收到指示错误的 SQLCODE, 但仍正常结束;在这种情况下,DB2 Connect 将落实数据。 若不想落实数据,则必须发出 ROLLBACK 命令。

FORCE 命令使您断开所选择用户或所有用户与数据库之间的连接。 主机或 AS/400 服务器数据库支持这样的操作; 可以强制用户脱离 DB2 Connect 工作站。

预编译

不同 IBM 关系数据库系统的预编译器有一些区别。 DB2 通用数据库的预编译器在以下方面与主机或 AS/400 服务器预编译器不同:

分块

DB2 Connect 程序支持 DB2 数据库管理程序分块联编选项:

UNAMBIG
仅将单值游标分块(这是缺省值)。

ALL
将模糊游标分块。

NO
不对游标进行分块。

DB2 Connect 程序将在 DB2 数据库管理程序配置文件中定义的块大小用于 RQRIOBLK 字段。 当前 DB2 Connect 版本支持的最大块大小为 32,767。 若在 DB2 数据库管理程序配置文件中指定了更大的值, 则 DB2 Connect 将使用值 32,767,但不会重设 DB2 数据库管理程序配置文件。 对动态 SQL 和静态 SQL 使用相同的块大小,从而以相同的方式来处理分块。
注意:大多数主机或 AS/400 服务器系统将动态游标视为模糊游标, 但 DB2 通用数据库系统将某些动态游标视为单值游标。为了避免混淆,可对 DB2 Connect 指定 BLOCKING ALL。

通过使用 CLP、控制中心 或 API 来在 DB2 数据库管理程序配置文件中指定块大小, 如 Administrative API ReferenceCommand Reference 中所示。

程序包属性

程序包具有下列属性:

集合 ID
程序包的 ID。它可在 PREP 命令上指定。

拥有者
程序包拥有者的权限 ID。它可在 PREP 或 BIND 命令上指定。

创建者
联编程序包的用户名。

限定符
程序包中对象的隐式限定符。它可在 PREP 或 BIND 命令上指定。

每个主机或 AS/400 服务器系统对这些属性的使用都有限制:

DB2 通用数据库 OS/390 版
所有四种属性可以是不同的。使用不同的限定符需要特殊的管理特权。 有关与使用这些属性有关的条件的详情, 参考 DB2 通用数据库 OS/390 版的 Command Reference

DB2 VSE 版和 VM 版
所有属性必须完全相同。若 USER1(用 PREP)创建联编文件, 而 USER2 执行实际的联编,则 USER2 必须具有 DBA 权限才能为 USER1 进行联编。 仅 USER1 的用户名用于属性。

DB2 通用数据库 AS/400 版
限定符指示集合名。限定符与所有权之间的关系 将影响授予和取消对对象的特权。注册的用户名为创建者和拥有者, 除非它受到集合 ID 的限定(此时集合 ID 就是拥有者)。在集合 ID 用作限定符之前, 该集合 ID 必须已经存在。

DB2 通用数据库
所有四种属性可以是不同的。使用不同的拥有者需要具有管理权限, 且联编程序必须对模式(若它已存在)具有 CREATEIN 特权。
注意:DB2 Connect 对 DB2 通用数据库 OS/390 版和 DB2 通用数据库 提供了 SET CURRENT PACKAGESET 命令支持。

C 零终止字符串

CNULREQD 联编选项覆盖使用 LANGLEVEL 选项指定的零终止字符串的处理。

有关进行准备(LANGLEVEL 选项被设置为 MIA 或 SAA1) 时如何处理零终止字符串的说明,参考Application Development Guide

缺省情况下,CNULREQD 被设置为 YES。这导致根据 MIA 标准来 解释零终止字符串。若连接至 DB2 通用数据库 OS/390 版服务器, 则强烈建议将 CNULREQD 设置为 YES。您需要联编根据 SAA1 标准编码的应用程序 (对于零终止字符串来说),并将 CNULREQD 选项设置为 NO。 否则,即使零终止字符串是使用设置为 SAA1 的 LANGLEVEL 来准备的, 也将根据 MIA 标准来解释这些字符串。

独立的 SQLCODE 和 SQLSTATE

独立的 SQLCODE 和 SQLSTATE 变量,如 ISO/ANS SQL92 中所定义的那样, 是通过 LANGLEVEL SQL92E 预编译选项而受到支持的。在预编译时将发出 SQL0020W 警告,指示 LANGLEVEL 不受支持。 此警告仅适用于在 Command Reference 中的 LANGLEVEL MIA (它是 LANGLEVEL SQL92E 的子集)下面列示的功能部件。

定义排序顺序

EBCDIC 和 ASCII 之间的区别将导致在各种数据库产品中的排序顺序不同, 并且还会影响 ORDER BY 和 GROUP BY 子句。 将这些区别减小到最低限度的一种方法是创建模仿 EBCDIC 排序顺序的用户定义排序顺序。 仅当您创建新数据库时,才能指定整理顺序。 有关详情,参考 Application Development GuideAdministrative API ReferenceCommand Reference
注意:现在,数据库表就可以 ASCII 格式存储在 DB2 通用数据库 OS/390 版上。 这允许在 DB2 Connect 与 DB2 通用数据库 OS/390 版之间更快地交换数据,并且不需要提供字段过程, 否则,必须使用字段过程来转换数据以及将数据重新排序。

管理参考完整性

不同系统处理参考约束的方式是不同的:

DB2 通用数据库 OS/390 版
在可以使用主关键字来创建外部关键字之前,必须对主关键字创建索引。 表可以引用它们自己。

DB2 VSE 版和 VM 版
将为外部关键字自动创建索引。表不能引用它们自己。

DB2 通用数据库 AS/400 版
将为外部关键字自动创建索引。表可以引用它们自己。

DB2 通用数据库
对于 DB2 通用数据库数据库,将为唯一约束(包括主关键字)自动创建索引。 表可以引用它们自己。

其他规则随级联级别的不同而有所变化。

锁定

数据库服务器执行锁定的方式可能会影响某些应用程序。例如, 围绕着行级锁定和游标稳定性的隔离级别设计的应用程序 不能直接移植至执行页级锁定的系统。由于存在这些基本区别, 应用程序可能需要进行调整。

DB2 通用数据库 OS/390 版和 DB2 通用数据库产品能够使锁定超时, 并发送一个错误返回码以等待应用程序。

SQLCODE 和 SQLSTATE 中的区别

对于相似的错误,不同的 IBM 关系数据库产品不会总是生成相同的 SQLCODE。 可以用以下两种方法的任一种来处理此问题:

使用系统编目

在各个 IBM 数据库产品中,系统编目会有所不同。通过使用视图可以掩盖许多区别。 有关信息,参见您正在使用的数据库服务器的文档。

通过在 DB2 系列中提供目录查询的相同 API 和结果集的支持, CLI 中的编目功能就可以避免此问题。

检索分配时发生数字转换溢出

不同的 IBM 关系数据库产品处理检索分配时发生的数字转换溢出 的方式可能会不同。例如,考虑从 DB2 通用数据库 OS/390 版和 DB2 通用数据库中 将浮点列取装到整数主变量中的情况。将浮点值转换为整数值时, 可能会发生转换溢出。缺省情况下,DB2 通用数据库 OS/390 版将把警告 SQLCODE 和空值返回给应用程序。 相反,DB2 通用数据库将返回转换溢出错误。建议应用程序通过取装到适当大小的主变量来 避免在检索分配时发生数字转换溢出。

隔离级别

当您准备或联编应用程序时,DB2 Connect 接受下列隔离级别:

RR
可重复读

RS
读稳定性

CS
游标稳定性

UR
未落实读

NC
不落实

这些隔离级别是按照从最高保护到最低保护的次序来列示的。 若主机或 AS/400 服务器不支持您指定的隔离级别, 则使用下一个高些的受支持级别。

表 2显示了每个主机或 AS/400 应用程序服务器上的每个隔离级别的结果。

表 2. 隔离级别
DB2 Connect DB2 通用数据库 OS/390 版 DB2 VSE 版和 VM 版 DB2 通用数据库 AS/400 版 DB2 通用数据库
RR RR RR 注释 1 RR
RS 注释 2 RR COMMIT(*ALL) RS
CS CS CS COMMIT(*CS) CS
UR 注释 3 CS COMMIT(*CHG) UR
NC 注释 4 注释 5 COMMIT(*NONE) UR

记录:

  1. 在 DB2 通用数据库 AS/400 版上没有与 RR 匹配的等价 COMMIT 选项。DB2 通用数据库 AS/400 版通过锁定整个表来支持 RR。

  2. 对于版本 3.1,生成 RR,而对于带 APAR PN75407 的版本 4.1,或对于版本 5.1,则生成 RS。

  3. 对于版本 3.1,生成 CS,对于版本 4.1 或版本 5.1,则生成 UR。

  4. 对于版本 3.1,生成 CS,而对于带 APAR PN60988 的版本 4.1,或对于版本 5.1,则生成 UR。

  5. DB2 VSE 版和 VM 版不支持隔离级别 NC。

若应用程序与隔离级别 UR 联编且分块被设置为 ALL, 或者隔离级别被设置为 NC,则借助 DB2 通用数据库 AS/400 版,就可以存取未记入日志的表。

存储过程

存储过程构建器

“DB2 存储过程构建器”提供了易于使用的开发环境, 以创建、安装和测试存储过程。它让您在 DB2 服务器上把重点放在创建存储过程逻辑上, 而不是放在注册、构建和安装存储过程的细节上。 另外, 借助“存储过程构建器”,您可以在一个操作系统上开发存储过程, 而在其他服务器操作系统上构建它们。

“存储过程构建器”是支持快速开发的图形应用程序。 使用“存储过程构建器”,可以执行下列任务:

可以从“DB2 通用数据库”程序组将“存储过程构建器”作为独立的应用程序来启动, 或者,可以从下列任何开发应用程序来启动“存储过程构建器”:

还可以从“DB2 OS/390 版”的“控制中心”启动“存储过程构建器”。 可以从“控制中心工具”菜单、工具栏或“存储过程”文件夹将 “存储过程构建器”作为独立的进程来启动。另外, 从“存储过程构建器项目”窗口中,还可以将对“DB2 OS/390 版” 服务器构建的一个或多个已选择的 SQL 存储过程调出至能够在“命令行处理器”(CLP) 内运行的指定文件中。

“存储过程构建器”通过使用项目来管理您的工作。每个 “存储过程构建器”项目将您的连接保存到特定的数据库中,例如, “DB2 OS/390 版”服务器。另外,还可创建过滤器以显示 每个数据库上存储过程的子集。当打开新的或现存的“存储过程构建器”项目时, 可以过滤存储过程,以便您根据存储过程的名称、模式、语言或集合 ID 来 查看存储过程(仅适用于 OS/390)。

连接信息保存在“存储过程构建器”项目中; 因此,当您打开现存项目时,将自动提示输入用于数据库的用户 ID 和口令。 通过使用“插入 SQL 存储过程”向导, 可在“DB2 OS/390 版”服务器上构建 SQL 存储过程。对于对 “DB2 OS/390 版”服务器构建的 SQL 存储过程, 可设置特定的编译、预链接、链接、联编、运行期、WLM 环境、 以及外部安全性选项。

另外,还可以获得有关 SQL 存储过程的 SQL 成本信息, 包括有关 CPU 时间的信息以及 SQL 存储过程正在其上运行的线程的 DB2 成本信息。 尤其是可以获得有关闭锁/锁定争用等待时间、获取页数、 读 I/O 数和写 I/O 数的成本信息。

要获得成本信息,“存储过程构建器”应连接至“DB2 OS/390 版”服务器、 执行 SQL 语句、调用存储过程 (DSNWSPM) 以了解 SQL 存储过程所使用的 CPU 时间。

NOT ATOMIC 复合 SQL

复合 SQL 允许将多个 SQL 语句编组在单个可执行块中。 这样可以减少网络额外开销和缩短响应时间。

DB2 Connect 支持 NOT ATOMIC 复合 SQL。这意味着在发生错误之后, 仍继续处理复合 SQL。(对于 ATOMIC 复合 SQL(DB2 Connect 不支持它), 错误将回滚整个复合 SQL 组。)

语句将继续执行,直到被应用程序服务器终止为止。 通常,将仅在发生严重错误时才会停止执行复合 SQL 语句。

NOT ATOMIC 复合 SQL 可以配合所有受支持的主机或 AS/400 应用程序服务器使用。

若发生了多个 SQL 错误,则在 SQLCA 的 SQLERRMC 字段中返回前七个失效语句的 SQLSTATE,并且有一条信息, 指示发生了多个错误。有关详情,请参考SQL Reference

DB2 Connect 的多站点更新

DB2 Connect 允许您执行多站点更新,也称为两阶段落实。 多站点更新就是更新单个分布式工作单元 (DUOW) 中的多个数据库。 您是否可以使用此功能取决于下列几个因素:

DB2 Connect 支持的主机或 AS/400 服务器 SQL 语句

对于主机或 AS/400 服务器处理而非 DB2 通用数据库系统的处理, 下列语句编译成功:

命令行处理器也支持这些语句。

对于主机或 AS/400 服务器处理,下列语句是受支持的, 但不被添加至联编文件或程序包,且不受命令行处理器支持:

预编译器作了下列假定:

DB2 Connect 拒绝的主机或 AS/400 服务器 SQL 语句

DB2 Connect 和命令行处理器都不支持下列 SQL:

DB2 VSE 版和 VM 版扩充动态 SQL 语句被拒绝,并返回错误码 -104 和语法错误 SQLCODE。


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