DB2 9.7 中的 SQL 兼容性

从触发器到对象改进:演示新的 Oracle 兼容性特性

从触发器到对象改进,本文演示 DB2 9.7 中新的 Oracle 兼容性特性。
来自 IBM Data Management Magazine 中文版。

Anil Mahadev, 撰稿人, IBM Data Management 杂志

Anil Mahadev 是 IBM Data Champion 和 IDUG India Forum 的理事会成员。他当前是印度 Bengaluru 的一位独立顾问,研究数据库实现、Windows 集群、高可用性以及多数据库平台和应用程序的战略。



2009 年 8 月 05 日

各位开发人员!您拥有 Oracle 数据库技能吗?希望在另一种数据库平台上重用 PL/SQL 知识和代码吗?

IBM DB2 for Linux, UNIX, and Windows (LUW) 已经完成了一项重大的改造。由于客户一直要求提供节省成本的改进,最新版本 DB2 9.7 在大家熟悉的领域提供了许多新技术,比如自治(自我管理)和深度压缩(见本期杂志中的 “DB2 9.7:全面改进”)。但是,开发人员最感兴趣的是与 SQL 兼容性相关的功能。这些特性让客户更容易采用 DB2 作为数据库软件,从而利用它的节省成本和高性能特性。即使客户目前最熟悉其他数据库系统,也很容易掌握 DB2。

在本文中,我将通过示例演示 DB2 9.7 中新的 SQL 兼容特性。首先讨论触发器和新的数据类型,然后谈谈对 Oracle SQL 和 PL/SQL 的支持,最后讨论对象和并发改进。这样所有开发人员都应该相信 DB2 是 “兼容的”。

首先,连接 Command Line Processor Plus (CLP Plus) 窗口(见图 1),把 “db2admin” 替换为您选择的登录 ID:
clpplus db2admin@localhost:50000/sample

SQL 兼容性

使用 DB2 9.7 中新的 SQL 兼容性特性的第一步是启用 DB2_COMPATIBILITY_VECTOR 参数。设置 db2set DB2_COMPATIBILITY_VECTOR=ORA,即可为后续的所有数据库创建操作启用与 Oracle 相关的 SQL 兼容性特性。对 DB2_COMPATIBILITY_VECTOR 使用的一些最重要的参数的解释见表 1。

要启用这个特性,您必须具有管理特权。在 DB2 命令窗口中输入以下命令:

db2set DB2_COMPATIBILITY_VECTOR=ORA
db2stop
db2start

要创建一个简单的数据库,输入:db2 create database [dbname]。然后,可以输入以下命令连接数据库:
db2 connect to [dbname];

下一步是创建使用 Oracle 数据类型的表。在 CLP Plus 窗口或 IBM Data Studio 中输入下面的 CREATE TABLE 语句:
Create table employee (EMPNO NUMBER(5), ENAME VARCHAR2(50), DEPTNO NUMBER(5))

图 1: 在 DB2 9.7 中,可以通过 CLP Plus 界面体验 SQL 兼容性特性
图 1: 在 DB2 9.7 中,可以通过 CLP Plus 界面体验 SQL 兼容性特性

PL/SQL 特性

现在讨论支持创建 PL/SQL 过程的特性。DB2 9.7 支持:

  • 用户定义的包
  • PL/SQL 过程/函数/匿名块
  • 内置的包(DBMS_OUT.PUT_LINE、DBMS_PIPE、DBMS_UTL 等)
  • 关联 (INDEX BY) 数组
  • Varrays
  • 触发器
  • %ROWTYPE
  • %TYPE
  • EXCEPTIONS
  • Ref-Cursors

注意,只有 DB2 9.7 for LUW 的 Enterprise Server Edition 和 Workgroup Edition 提供 PL/SQL 支持。在 DB2 Express-C、DB2 Express 和 DB2 Personal Edition 中不支持 PL/SQL。


DB2 中的 PL/SQL 过程

DB2 支持 PL/SQL 语言的许多语法。我们通过一些示例代码看看效果。在编译和执行时,下面的 PL/SQL 过程向用户显示一条欢迎消息。为了在控制台上看到输出,先要执行 SET SERVEROUTPUT ON 命令。

CREATE OR REPLACE PROCEDURE message_proc (myname varchar2)
IS
BEGIN
DBMS_OUTPUT.PUT_LINE('Welcome to DB2 9.7 ( )! ' || myname
|| '. Now supports for ORACLE SQL and PL /SQL as well :-)!');
END message_proc;

执行以下命令在 DB2 中调用这个 PL/SQL 过程:

EXEC proc_name
EXEC message_proc('Anil');

下面是一个使用 FOR 循环的示例:

BEGIN
FOR a IN 10 .. 20 LOOP
DBMS_OUTPUT.PUT_LINE('Counter ' || a);
END LOOP;
END;

这个循环产生以下输出:

Counter 10
Counter 20


truncate table 命令

有 Oracle 数据库背景的开发人员很可能使用过 TRUNCATE TABLE 命令。DB2 现在也支持这个命令。下面的代码创建一个简单的表,在其中添加行,然后使用 TRUNCATE 命令删除表中的所有行:

CREATE TABLE CLIENTS
(CLIENTID NUMBER(5) PRIMARY KEY NOT NULL,CLIENTNAME
VARCHAR2(50));

插入一些行:

INSERT INTO CLIENTS (CLIENTID, CLIENTNAME) VALUES (1,'IBM');
INSERT INTO CLIENTS VALUES (2,'MSFT');
INSERT INTO CLIENTS VALUES (3,'EDB');

表 1: DB2_COMPATIBILITY_VECTOR 值
表 1: DB2_COMPATIBILITY_VECTOR 值

我们看一下插入的行:

SELECT * FROM CLIENTS;

现在,执行以下命令删除这些行:

TRUNCATE TABLE CLIENTS;

现在确认这些行是否已经消失了:

SELECT * FROM CLIENTS;

输出中应该不会显示任何行。


对象和并发改进

最后,我要讨论 DB2 9.7 中两个重要的改进,它们可以节省时间和提高性能:初次使用检验(first-use validation)和新的默认锁状态。

初次使用检验
如果修改了底层数据库对象(表、视图、过程、函数等等),那么在依赖它的对象下一次获取它时,会自动地重新检验它。这肯定会节省应用程序开发人员的时间。每当修改对象时,都会执行自动的依赖性检查。

Read currently committed(DB2 中的默认锁状态)
在以前的 DB2 版本中,不可能出现一个用户读取一行,而同时另一个用户写同一行的情况。这是因为读者要等待写操作的结果。现在,DB2 9.7 使用的默认锁状态允许读者不等待写操作的结果。相反,它们会读取这一行的当前已经提交的版本。因此,读者不会阻塞写者,写者也不会阻塞读者。

这些新的 SQL 兼容性特性给我留下了非常深刻的印象。本文只能涉及这些特性的皮毛,请您自己试试 DB2 9.7。您绝不会失望的!

参考资料

学习

获得产品和技术

  • 现在可以免费使用 DB2 。下载 DB2 Express-C,这是为社区提供的 DB2 Express Edition 的免费版本,它提供了与 DB2 Express Edition 相同的核心数据特性,为构建和部署应用程序奠定了坚实的基础。
  • 下载 IM 软件试用版,体验信息管理软件强大的功能。

讨论

  • 通过访问 alphaWorks 获得更多 IBM 的前瞻性技术和资源。
  • 通过访问 IBM Database Magazine 站点 community 专题 获得更多用户体验和交流信息。

条评论

developerWorks: 登录

标有星(*)号的字段是必填字段。


需要一个 IBM ID?
忘记 IBM ID?


忘记密码?
更改您的密码

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件

 


在您首次登录 developerWorks 时,会为您创建一份个人概要。您的个人概要中的信息(您的姓名、国家/地区,以及公司名称)是公开显示的,而且会随着您发布的任何内容一起显示,除非您选择隐藏您的公司名称。您可以随时更新您的 IBM 帐户。

所有提交的信息确保安全。

选择您的昵称



当您初次登录到 developerWorks 时,将会为您创建一份概要信息,您需要指定一个昵称。您的昵称将和您在 developerWorks 发布的内容显示在一起。

昵称长度在 3 至 31 个字符之间。 您的昵称在 developerWorks 社区中必须是唯一的,并且出于隐私保护的原因,不能是您的电子邮件地址。

标有星(*)号的字段是必填字段。

(昵称长度在 3 至 31 个字符之间)

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件.

 


所有提交的信息确保安全。


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=Information Management
ArticleID=418362
ArticleTitle=DB2 9.7 中的 SQL 兼容性
publish-date=08052009