DB2数据库移植常见问题全面解析
2009-01-19 16:39:38 来源:WEB开发网将上述代码保存在一个文本文件中,假设保存到 func.db2 中,使用以下命令创建函数:db2 –td@ -f func.db2。然后即可使用该 UDF 进行时间格式转换。该函数可以根据输入的 timestamp 转换为多种格式,包括 yyyymmdd,mm/dd/yyyy,yyyy/dd/mm hh:mi:ss,或者返回毫秒数(nnnnnn)。
在 SQL 存储过程中有('每月'||COALESCE(VAR, '')||'元')语句时,编译无法通过
解决办法:客户端 codepage 和脚本的编码格式不同,所以服务器端无法识别脚本命令,把客户端 codepage 设为 1386 即可。
Oracle 中有一个函数 DBMS_SQL.VARCHAR2_TABLE,可以传入一个以某个分隔符为分隔的字符串,该函数将该字符串以分隔符拆分,返回给调用者一个数组或是表,DB2 中如何实现类似功能?
解决办法:用全局临时表实现;
原因分析:Oracle 中的 varchar2_table 其实是集合的概念,在 DB2 中不支持集合。DB2 通常做法是声明全局临时表(DGTT),第一列存储记录顺序,第二列存储数据。以下是示例,在声明后即可向该表中插入和查询数据,效果和集合相同。
清单 11. 实现拆分
DECLARE GLOBAL TEMPORARY TABLE SESSION.temp_emp_list
(num integer, EmpName varchar(30))
WITH REPLACE
ON COMMIT PRESERVE ROWS NOT LOGGED;
DB2 无法对允许空值的列建唯一性索引
解决办法:将该列属性设为不允许为空;
原因分析:空值在数据库中被认为是不确定值,任何其他值与空值组合,结果仍然是空值,不具备唯一性,所以 DB2 不允许空值列作为唯一键的索引列。
同一张表的索引可以放在不同表空间中吗?
解决办法:在创建表的时候使用 INDEX in tablespace-name 选项,在该表上创建的索引将存放在指定的表空间上;
原因分析:表数据,表索引,以及表中的 long 型数据可以分开存放在不同的表空间。可以提高性能。
用UDF 调用存储过程总是编译通不过,报关键字冲突错误
解决办法:把该 UDF 改造成存储过程;
原因分析:DB2 中 UDF 主要用于逻辑运算和处理,存储过程则偏重于处理数据库对象,如表数据的增删查改,所以两者的用途不同决定了其使用方式也不同,UDF 使用的是内嵌的 SQL 语句,是 SQL 语言的子集,不能执行动态 SQL,如果 UDF 调用存储过程,则会导致 SQL 嵌套上的混乱,因为 UDF 通过调用存储过程实现了 SQL 全集,这是不允许的,所以报关键字冲突,把该 UDF 改为存储过程即可。
建议对于不涉及数据库表操作的业务逻辑可以用 UDF 实现,如逻辑算法,文件操作,系统调用等,而涉及到数据库表操作的功能则交给存储过程来实现。存储过程可以调用 UDF。
工具使用
如何在 CLP 中查看表结构
解决办法:使用 db2 describe table 命令。
用开发中心远程调试存储过程,可以构建,但构建并调试却不能成功
解决办法:在远程数据库上安装 DB2 开发包;
原因分析:在远程调试时将会调用远程数据库上的开发包,所以远程服务器一定要装有开发包才可远程调试。
如何将部署在 DB2 数据库上的存储过程导出为可执行脚本,以便在其它机器上部署
解决办法:在开发中心中可以导出存储过程为脚本,前提是之前创建存储过程的时候没有指定 hide body。
如何让 DB2 自动运行 runstat
解决办法:使用 db2 update db cfg using auto_runstats on 命令。
- ››db2 对float类型取char后显示科学计数法
- ››DB2中出现SQL1032N错误现象时的解决办法
- ››DB2 锁升级示例
- ››数据库对象——存储过程
- ››db2诊断系列之---定位锁等待问题
- ››数据库设计词汇对照表
- ››db2 命令选项解释
- ››数据库大型应用解决方案总结
- ››移植Windows自宿主WCF服务到Linux/Mono2.8
- ››DB2 最佳实践: 使用 DB2 pureXML 管理 XML 数据的...
- ››DB2 9.5 SQL Procedure Developer 认证考试 735 准...
- ››DB2 9.5 SQL Procedure Developer 认证考试 735 准...
更多精彩
赞助商链接