WEB开发网
开发学院数据库DB2 DB2中多种常用功能的解决方法 阅读

DB2中多种常用功能的解决方法

 2007-05-20 16:18:39 来源:WEB开发网   
核心提示: CREATE TRIGGER AutoIncrement NO CASCADE BEFOREINSERT ON FoobarREFERENCING NEW AS nFOR EACH ROW MODE DB2SQL SET (n.col1) =(SELECT COALESCE(MAX(col
CREATE TRIGGER AutoIncrement NO CASCADE BEFORE
INSERT ON Foobar
REFERENCING NEW AS n
FOR EACH ROW MODE DB2SQL SET (n.col1) =
(SELECT COALESCE(MAX(col1),0) + 1 FROM Foobar )

DB2 还有一个名为 GENERATE_UNIQUE 的函数。这个函数将节点号(用于多分区数据库)与时间戳记结合,因此它可以与企业扩展版本(EEE)一起使用。IDENTITY 和 SEQUENCE 在 DB2 的下一个主要版本出现前还不能与 EEE 一起使用。GENERATE_UNIQUE 有两个缺点:数据类型(CHAR(13) FOR BIT DATA)不是按顺序递增,并且不象数值数据类型那样易于使用。

更简单的解决方案是标量子查询表达式:

INSERT INTO Foobar (key_col, ...)
VALUES (COALESCE((SELECT MAX(key_col) FROM Foobar) +1, 0) ...)

获得一屏数据

这些方法对于那些在数据库和应用程序投入生产以前有机会进行一些设计工作的模式和应用程序来说是不错的。但您还记得那两个以 A(ARIES(航班订票环境仿真)和 ACID(原子性、一致性、隔离和持久性))开头的 4.5 字母单词吗?如果您预定了航班,那么您希望他们在您到达机场时记得这回事。这就是持久性:有用的数据是持久的。这意味着即使您定义了一个好的主键,有些人可能会查询结果集的“前二十行”,而不管结果集中有多少行。更糟的情况是有人要求您显示第 21 行到 40 行。但等一下,您会提出异议,关系表中的行没有顺序!对于希望在他们的 Netscape 浏览器中一次看到二十行的用户而言,您就好象在说冰岛语。DB2 允许您实时地给结果集排序,并可以从该结果集的开始或结尾部分提取任意数量的行:

SELECT NAME FROM ADDRESS
ORDER BY NAME
FETCH FIRST 10 ROWS ONLY
SELECT NAME FROM ADDRESS
ORDER BY NAME DESC
FETCH FIRST 10 ROWS ONLY

ORDER BY 将强制在内存中对整个结果集进行排序,所以,为了提高 DB2 服务器性能,我们不这么做(尽管只向客户机发送 10 行可能会提高网络性能)。如果您不关心顺序并且只想知道至少有 10 行符合结果集,则清除 ORDER BY 以省去 DB2 服务器上的排序:

上一页  1 2 3 4 5 6 7 8  下一页

Tags:DB 多种 常用

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