程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> SyBase數據庫 >> SyBase綜合文章 >> SYBASE 數據庫遷移到AS 400 db2的FAQ(一)

SYBASE 數據庫遷移到AS 400 db2的FAQ(一)

編輯:SyBase綜合文章
筆者通過從事數據庫的開發和管理工作數年!前不久剛剛完成Sybase 數據庫向DB2數據庫的遷移項目工作!

應網友和一些同學朋友的要求!要我介紹一些數據庫遷移的策略和方法!

目前見於網上數據庫遷移的資料較少!我實際工作中的遇到的技術難點和解決的策略和方法,簡單介紹!希望對想要遷移數據庫,又不知道如何下手的朋友有所借鑒!本文列出51個實際中問題和解決的策略和方法!非常注重實際!



1.Sybase數據類型和db2有那些不同?

答:Datetime 對應 timestamp

Tinyint ,smallint 對應 smallint

Money 類型對應 numeric(19,4)



2.db2數據庫是否支持自增加列設置?

答:支持,例如:SYSID BIGINT GENERATED ALWAYS AS IDENTITY

將原來sysid 的 numerical(18,0) 改為 BIGINT類型



3.Db2是否有convert()函數,Sybase 下這樣語句如何轉換?

答:convert(datetime,convert(char(8),dateadd(day,-1,getdate()),112))

db2下沒有convert()函數,關於轉換可以使用如下函數

char(),timestamp(),date(),time() …另外可以使用系統內部的系統變量

current timestamp , current date , current time 代表系統當前日期時間

如上語句可以這樣轉換

timestamp( current date –1 days,time(’00.00.00’))

4.Sybase的isnull(@vc_pici_id,’0’) 如何轉換?

答:DB2下使用value(vc_pici_id,’0’)或者coalesce(vc_pici_id,’0’)



5.Db2下如何調用存儲過程和調用代返回值得存儲過程?

答: (1)無返回參數調用CALL proc1(v_empno, v_salary)

(2)有返回參數調用

declare ret_var integer default 0;

CALL proc1(var1,var2) ;

Get Diagnostics ret_var = RETURN_STATUS;

---------

declare err_code integer default 0;

call proc1(var1,err_code);

IF ERR_CODE = 1 THEN

XXXX;

END IF;

6.Sybase 下游標控制是非常方便的,使用sqlcode,sqlstate來控制,不知道db2下游標是如何控制的?

答:DB2下游標控制不是非常的輕松和方便的,同樣也可以使用sqlcode,sqlstate,或者用戶自己控制,DB2下SQLCODE,SQLSTATE不能直接使用,必須聲明後使用,(也就是說將系統的SQLCODE,SQLSTATE本地實例化一分拷貝)。一般采用用戶定義游標開關和sqlcode返回信息一起共同控制的方法.

舉例1:(這裡說明一個問題,游標開關是和SQLCODE捆綁的。‘02000’就是SQLCODE號)

//-------

標准使用游標的例子

標准WHILE DO 控制游標

//-------





CREATE PROCEDURE CREDITP

(IN i_perinc DECIMAL(3,2),

INOUT o_numrec DECIMAL(5,0))

LANGUAGE SQL

BEGIN -- 這裡是用戶管理事務

DECLARE proc_cusnbr CHAR(5);

DECLARE proc_cuscrd DECIMAL(11,2);

DECLARE numrec DECIMAL(5,
  1. 上一頁:
  2. No
Copyright © 程式師世界 All Rights Reserved