态度决定高度、企图决定版图、格局决定结局

导航

DB2-1

1.HOW TO USE DECLARED TEMPORARY TABLES ?
  1) IBM DB2 语法树

 下面是定义临时表的语法:

 
  2) TEMPORARY TABLE 和 TEMPORARY TABLESPACE
     在db2中,你可以创建临时表空间和临时表。它们都不会在db2的开发,管理环境中可视化。临时表也只有在一个session中有效,
     不同session中的临时表不能相互联系,同一个session也不能有同名的表名。还有,如果系统中定义了一个sechma(模式)也叫“SESSION",
     那么,如果你使用 SESSION.TABLENAME去选择表,如果临时表中存在同样的表名,则优先选择它,而不是物理表。
  3) TEMPORARY 分析
     在ibm文档上有关于这个的详细分析,地址
   这里我是我遇到的问题和解决方法。(在命令编辑器中完成)
   在理解了语法树后,可以很简单的写出正确的语法表达式,如:
   DECLARE GLOBAL TEMPORARY TABLE "TestTable"("id" int NOT NULL,"name" varchar(50) NOT NULL,"age" int NOT NULL)
   这个是通过定义表结构创建的;同样你可以通过 like tablename创建。具体内容看语法树。
     你可以通过session."TestTable" 获取表结构。
     于是你会想向表插入数据:
     INSERT INTO SESSION."TestTable"("id","name","age") Values(1,'fly',20)
     或者通过select 方式: insert into session.temptbl (
select id,blogname,userid,regdate from blogs)
     数据插入了,你通过select * from session."TestTable"去查询。啊???
     怎么没有数据?出来的还仅仅是表结构,我明明看到数据插入了啊。
     经过仔细的查看文档,语法树上有个:
 
      .-ON COMMIT DELETE ROWS---.
>--*--+-------------------------+--*---------------------------->
      '-ON COMMIT PRESERVE ROWS-'
意思是commit的时候删除还是保留数据。再看看,我们的命令编辑器,默认有个选项:
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
呵呵。这里的落实就是commit了。所以当你插入数据后,自动commit,然后就自动删除你的数据。所以不管你怎么尝试,查询都没有结果。把这个钩子去掉
就可以了。好了,改变我们创建临时表的方法:

DECLARE GLOBAL TEMPORARY TABLE "TestTable"("id" int NOT NULL,"name" varchar(50) NOT NULL,"age" int NOT NULL)
ON COMMIT PRESERVE ROWS   //这个意思就是,commit的时候保留记录

WITH REPLACE  //这个是如果已经存在,则drop后新建

在Insert,select 呵呵,结果一定会出来的。
  4) SqlCenter 实现体验
     对于新的东西(比如db2对我而言),注重它的基础点,比如查看语法树,而不是盲目实验是有好处的。
5) http://publib.boulder.ibm.com/infocenter/db2luw/v8/index.jsp?topic=/com.ibm.db2.udb.doc/ad/samples/jdbc/s-TbTemp-java.htm
http://publib.boulder.ibm.com/infocenter/db2luw/v8/index.jsp?topic=/com.ibm.db2.udb.doc/ad/samples/jdbc/s-TbTemp-out.htm

posted on 2007-06-06 09:22  flyingchen  阅读(1011)  评论(0编辑  收藏  举报