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) 编辑 收藏 举报