欢迎投稿

今日深度:

DB2数据库移植常见问题全面解析(1)(4)

数据操作

如何对应 SQLServer 的 InsertBulk 命令?

解决办法:使用 load 命令。

如何给 VARGRAPHIC 类型字段设置缺省值?

解决办法:将数据库建为 UTF-8 格式的数据库。

表中有 long varchar 字段,在存储过程的游标中,以 select distinct varchar该字段)……方式选择记录,但编译通不过

解决办法:把 distinct 去掉;

原因分析:如果有 long 型字段,加 distinct 关键字就失去意义而且十分影响性能,另外该列在原来的 Oracle 应用中也只是定义为 varchar(4000),建议在 DB2 中仍设为 varchar 型,同时将该表所在表空间的 pagesize 加大,由缺省的 4k 设为 16k 或 32k。

DB2存储过程中的异常处理如何写,与Oracle中的有何区别?

解决办法:DB2 中使用以下 SQL 语句声明和处理异常:

清单7. 声明和处理异常,方法一

DECLARE HANDLER FOR SQLEXCEPTION, SQLWARNING, NOT FOUND
BEGIN

END;

或者也可以针对某一sqlstate定义相应的错误处理句柄,示例如下:

清单8. 声明和处理异常,方法二
DECLARE condition_name CONDITION FOR SQLSTATE value;
DECLARE EXIT HANDLER FOR too_many_rows
BEGIN
...
END;

如何查询数据库中用户已定义的表?

解决办法:select * from syscat.tables;

原因分析:DB2 提供了一组视图用以用户查询数据库对象,这些视图统一存放在 SYSCAT 模式下,这些视图几乎包含了所以的数据库对象编目信息,包括表、视图、名字空间、存储过程等等。用户可以在《DB2 UDB SQL Reference Volume 1》SQL Reference 1 的 Appendix D 中找到这些视图的详细定义。

如何查询数据库中用户已定义的 sequence?

解决办法:使用 select * from syscat.sequences。

如何用SQL语句获得表空间的当前使用率?

解决办法:可以使用如下 SQL 语句查询,在用该语句获得了表空间已用页数,可用页数等信息后,即可计算出表空间当前使用率:

清单9. 获得表空间页数信息
select tablespace_name, page_size, usable_pages, used_pages, free_pages
from table( snapshot_tbs_cfg( 'sample', -1 ) ) as t
where t.tablespace_type = 0 and t.tablespace_name=

在 Oracle 中可以将游标结果集通过 BULK 方式存入宿主数组中,DB2中如何实现?

解决办法:DB2 中不支持 BULK 方式,其替代方式是定义相应的数组,然后以循环方式每次从游标结果集中 fetch 一条记录到数组元素中。

DB2中如何用 SQL 语句取出满足条件的结果集的前N条记录?

解决办法:使用 select * from where fetch first row only

Oracle中有 trunacte 表的功能,速度非常快,它只是把表标志设为空,并不发生删除数据的 IO 操作,DB2 中如何做类似操作?

解决办法:可以先 drop 表,再重建该表

原因分析:Oracle 中 trunacte 表的速度之所以快,是因为它不记日志,只是直接把表的结构信息删除了,并不发生删除数据的 IO 操作。DB2 中 drop 表,也不会引起数据 IO 和日志记录,从而达到相同的效果。但前提是你预先有创建表的结构。否则不要随意 drop 表。

Oracle 有 truncate,DB2 中建议使用 drop,然后再 create 表,这样好还是 alter 表好?

解决办法:Oracle 的 truncate 是直接把表的数据清空,但不记日志,所以速度很快。DB2 中 drop 表也避免了大量记录记入日志的问题,再重建表就达到了快速清空表的目的。但 alter 是用于修改表结构的,和表的数据操作没有关系。


www.htsjk.Com true http://www.htsjk.com/shujukujc/19143.html NewsArticle 数据操作 如何对应 SQLServer 的 InsertBulk 命令? 解决办法: 使用 load 命令。 如何给 VARGRAPHIC 类型字段设置缺省值? 解决办法: 将数据库建为 UTF-8 格式的数...
评论暂时关闭