资源描述:
《SYBASE数据库迁移到AS400db2的FAQ.docx》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
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,conver
2、t(char(8),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下使用valu
3、e(vc_pici_id,’0’)或者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);IF
4、ERR_CODE=1THENXXXX;ENDIF;6.Sybase下游标控制是非常方便的,使用sqlcode,sqlstate来控制,不知道db2下游标是如何控制的?答:DB2下游标控制不是非常的轻松和方便的,同样也可以使用sqlcode,sqlstate,或者用户自己控制,DB2下SQLCODE,SQLSTATE不能直接使用,必须声明后使用,(也就是说将系统的SQLCODE,SQLSTATE本地实例化一分拷贝)。一般采用用户定义游标开关和sqlcode返回信息一起共同控制的方法.举例1:(这里说明一个问题,游标开关是和SQLCODE捆绑的
5、。‘02000’就是SQLCODE号)//-------标准使用游标的例子标准WHILEDO控制游标//-------CREATEPROCEDURECREDITP(INi_perincDECIMAL(3,2),INOUTo_numrecDECIMAL(5,0))LANGUAGESQLBEGIN--这里是用户管理事务DECLAREproc_cusnbrCHAR(5);DECLAREproc_cuscrdDECIMAL(11,2);DECLAREnumrecDECIMAL(5,0);DECLAREat_endINTDEFAULT0;--开关定义
6、DECLAREnot_foundCONDITIONFOR'02000';--没有数据,游标结尾定义DECLAREc1CURSORFORSELECTcusnbr,cuscrdFROMordapplib.customer;DECLARECONTINUEHANDLERFORnot_foundSETat_end=1;--定义CONTINUE条件DECLAREEXITHANDLERFORSQLEXCEPTIONROLLBACK;--sqlcode非'01''00''02'则退出并回滚事务SETnumrec=0;OPENc1;FETCHc1INTOpr
7、oc_cusnbr,proc_cuscrd;WHILEat_end=0DOSETproc_cuscrd=proc_cuscrd+(proc_cuscrd*i_perinc);SETnumrec=numrec+1;FETCHc1INTOproc_cusnbr,proc_cuscrd;ENDWHILE;SETo_numrec=numrec;CLOSEc1;COMMIT;--提交事务END举例2:--声明游标C1DECLAREc1CURSORFORSELECTcusnbr,cuscrdFROMordapplib.customer;OPENc1;-
8、-打开游标FETCHc1INTOproc_cusnbr,proc_cuscrd;--从游标获取数据IFSQLSTATE='02000'THEN--判断游标是否有数据(无)CALL