资源描述:
《sybase数据库迁移到as400db2的faq》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、SYBASE数据库迁移到AS400db2的FAQ1.Sybase数据类型和db2有那些不同?答:Datetime对应timestampTinyint,smallint对应smallintMoney类型对应numeric(19,4)2.db2数据库是否支持自增加列设置?答:支持,例如:SYSIDBIGINTGENERATEDALWAYSASIDENTITY将原来sysid的numerical(18,0)改为BIGINT类型3.Db2是否有convert()函数,sybase下这样语句如何转换?答:convert(datetime,convert(char(8)
2、,dateadd(day,-1,getdate()),112))db2下没有convert()函数,关于转换可以使用如下函数char(),timestamp(),date(),time()…另外可以使用系统内部的系统变量currenttimestamp,currentdate,currenttime代表系统当前日期时间如上语句可以这样转换timestamp(currentdate–1days,time(’00.00.00’))4.Sybase的isnull(@vc_pici_id,’0’)如何转换?答:DB2下使用value(vc_pici_id,’0’)或
3、者coalesce(vc_pici_id,’0’)5.Db2下如何调用存储过程和调用代返回值得存储过程?答:(1)无返回参数调用CALLproc1(v_empno,v_salary)(2)有返回参数调用declareret_varintegerdefault0;CALLproc1(var1,var2);GetDiagnosticsret_var=RETURN_STATUS;---------declareerr_codeintegerdefault0;callproc1(var1,err_code);IFERR_CODE=1THENXXXX;ENDIF;6.
4、Sybase下游标控制是非常方便的,使用sqlcode,sqlstate来控制,不知道db2下游标是如何控制的?答:DB2下游标控制不是非常的轻松和方便的,同样也可以使用sqlcode,sqlstate,或者用户自己控制,DB2下SQLCODE,SQLSTATE不能直接使用,必须声明后使用,(也就是说将系统的SQLCODE,SQLSTATE本地实例化一分拷贝)。一般采用用户定义游标开关和sqlcode返回信息一起共同控制的方法.举例1:(这里说明一个问题,游标开关是和SQLCODE捆绑的。‘02000’就是SQLCODE号)//-------标准使用游标的例
5、子标准WHILEDO控制游标//-------CREATEPROCEDURECREDITP(INi_perincDECIMAL(3,2),INOUTo_numrecDECIMAL(5,0))LANGUAGESQLBEGIN--这里是用户管理事务DECLAREproc_cusnbrCHAR(5);DECLAREproc_cuscrdDECIMAL(11,2);DECLAREnumrecDECIMAL(5,0);DECLAREat_endINTDEFAULT0;--开关定义DECLAREnot_foundCONDITIONFOR'02000';--没有数据,游标
6、结尾定义DECLAREc1CURSORFORSELECTcusnbr,cuscrdFROMordapplib.customer;DECLARECONTINUEHANDLERFORnot_foundSETat_end=1;--定义CONTINUE条件DECLAREEXITHANDLERFORSQLEXCEPTIONROLLBACK;--sqlcode非'01''00''02'则退出并回滚事务SETnumrec=0;OPENc1;FETCHc1INTOproc_cusnbr,proc_cuscrd;WHILEat_end=0DOSETproc_cuscrd=pr
7、oc_cuscrd+(proc_cuscrd*i_perinc);SETnumrec=numrec+1;FETCHc1INTOproc_cusnbr,proc_cuscrd;ENDWHILE;SETo_numrec=numrec;CLOSEc1;COMMIT;--提交事务END举例2:--声明游标C1DECLAREc1CURSORFORSELECTcusnbr,cuscrdFROMordapplib.customer;OPENc1;--打开游标FETCHc1INTOproc_cusnbr,proc_cuscrd;--从游标获取数据IFSQLSTATE='02
8、000'THEN--判断游标是否有数据(无)CALL