WEB开发网
开发学院数据库DB2 DB2 9.7 中的 SQL 兼容性:从触发器到对象改进(演... 阅读

DB2 9.7 中的 SQL 兼容性:从触发器到对象改进(演示新的 Oracle 兼容性特性)

 2009-11-16 00:00:00 来源:WEB开发网   
核心提示: CREATEORREPLACEPROCEDUREmessage_proc(mynamevarchar2)ISBEGINDBMS_OUTPUT.PUT_LINE('WelcometoDB29.7()!'||myname||'.NowsupportsforORACLESQLa

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 值

DB2 9.7 中的 SQL 兼容性:从触发器到对象改进(演示新的 Oracle 兼容性特性)

我们看一下插入的行:

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。您绝不会失望的!

上一页  1 2 3 

Tags:DB SQL 兼容性

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接