DB2 9.5 SQL Procedure Developer 认证考试 735 准备,第5部分
2010-02-18 15:01:11 来源:WEB开发网全局声明式临时表
临时表常常用来存储临时数据和中间结果。因为它们不需要日志记录,也不出现在系统编目中,所以可以提高性能。另外,因为临时表只允许单一连接,所以不需要锁。
只有声明(创建)声明式全局临时表 (DGTT) 的连接才能访问它。当这个数据库连接结束时,临时表被删除。
要想创建 DGTT,需要执行 DECLARE GLOBAL TEMPORARY TABLE 语句。下面是这个语句的语法图:
清单 1. 全局临时表声明的语法
.-,---------------------.
V |
>--+-(----| column-definition |-+--)-----------------------------+-->
+-LIKE--+-table-name1-+--+------------------+-----------------+
| '-view-name---' '-| copy-options |-' |
'-AS--(--fullselect--)--DEFINITION ONLY--+------------------+-'
'-| copy-options |-'
.-ON COMMIT DELETE ROWS---.
>--?--+-------------------------+--?---------------------------->
'-ON COMMIT PRESERVE ROWS-'
>--+-------------------------------------------+---------------->
| .-ON ROLLBACK DELETE ROWS---. |
'-NOT LOGGED--+---------------------------+-'
'-ON ROLLBACK PRESERVE ROWS-'
>--?--+--------------+--?--+---------------------+-------------->
'-WITH REPLACE-' '-IN--tablespace-name-'
>--?--+------------------------------------------------------------+--?-><
| .-,-----------. |
| V | .-USING HASHING-. |
'-PARTITIONING KEY--(----column-name-+--)--+---------------+-'
column-definition
|--column-name--| data-type |--+--------------------+-----------|
'-| column-options |-'
请注意,当指定 WITH REPLACE 子句时,会删除同名的现有 DGTT 并替换为新的表定义。
定义同名的声明式全局临时表的每个会话拥有自己的独特的临时表描述。当会话终止时,表行和临时表描述被删除。
下面解释一些选项:
ON COMMIT DELETE ROWS:在执行 COMMIT 操作时,如果表上没有打开 WITH HOLD 游标,就删除表中的所有行。这是默认设置。
ON COMMIT PRESERVE ROWS:在执行 COMMIT 操作时,保留表中的所有行。
ON ROLLBACK DELETE ROWS:在执行 ROLLBACK(或 ROLLBACK to SAVEPOINT)操作时,如果已经修改了表数据,就删除表中的所有行。这是默认设置。
ON ROLLBACK PRESERVE ROWS:在执行 ROLLBACK(或 ROLLBACK to SAVEPOINT)操作时,保留表中的所有行。
注意,BLOB、CLOB、DBCLOB、LONG VARCHAR、LONG VARGRAPHIC、XML、引用和结构化类型不能用作声明式全局临时表的列的数据类型。
按照以下步骤使用DB2 GDTT:
步骤 1. 确保有用户临时表空间存在。如果没有用户临时表空间,那么使用以下语法执行 CREATE USER TEMPORARY TABLESPACE 语句:
CREATE USER TEMPORARY TABLESPACE usr_tbsp MANAGED BY SYSTEM USING
('c:tempusertempspace') ;
步骤 2. 使用前面提供的语法在应用程序中执行 DECLARE GLOBAL TEMPORARY TABLE 语句。例如:
清单 2. DGTT 声明的示例
DECLARE GLOBAL TEMPORARY TABLE temp_proj
(projno CHAR(6), projname VARCHAR(24), projsdate DATE, projedate DATE,)
WITH REPLACE
ON COMMIT PRESERVE ROWS
NOT LOGGED
IN usr_tbsp ;
声明式临时表的数据库模式总是SESSION。
更多精彩
赞助商链接