| 導購 | 订阅 | 在线投稿
分享
 
 
 

經驗總結:DB2數據庫功能及性能使用方法

來源:互聯網  2008-07-09 05:37:18  評論

◆1.安裝DB2後可以通過命令窗口這樣的命令行方式或控制中心這樣的圖形界面方式來操作,而如果你的數據庫服務端不在本機,則還需要在「客戶機配置輔助程序」中做一個客戶端連接的配置。

◆2.控制中心中無法增刪改數據,只能編寫sql語句來實現而quest提供的工具雖然能增加數據,但居然無法用複制、粘貼和Tab鍵,必須逐個輸入,然後用鼠標點擊切換現存數據看來可以在單元格中編輯修改,但實際卻無法commit,呵呵,還是老老實實寫update語句,至于刪除數據,更是非寫delete語句不可。不過可以用pb以單元格方式編輯數據,相應的一個缺點是編輯數據的按鈕和刪除表的按鈕太近,萬一點錯了刪除表的按鈕,pb可是不作提示就把表給刪了的,faint

◆3.DB2的視圖裏不能直接用order by語句,必須這樣寫 select × from(select a,b,c from table1 order by a)astab

這種寫法的前提是你已經打過補丁了

◆4.存儲過程的問題:

DB2提供ltrim函數和rtrim函數,但偏偏不提供trim函數,如果你希望去除字符兩端的空格,對不起,必須用ltrim(rtrim()) 的方式調用insert 語句裏面居然不能用表達式賦值,必須把值先賦給一個變量調用其他存儲過程時竟然不能用常量做參數,必須把這個常量的值賦給一個變量,再以這個變量爲參數

select * from table fetch first n rows only 語句居然在存儲過程裏不可用

◆5.存儲過程裏可以使用動態sql,但函數裏卻不可以使用

◆6. 遇到commit或rollback時自動關閉遊標,所以需要慎重使用單獨提交。

proc builder老是在調試中內存不足,屏幕花掉。而如果斷點調試時暫停不進行下去的時間稍微長一點就會提示超時,受不了。

◆7.開發中遇到的一個問題

◆在使用日期變量+1 MONTHS OR 日期變量-1 MONTHS 的方式取日期時,比如日期變量值爲 2004-02-29時,存儲過程裏將日期變量+1 MONTHS 賦值給另一

日期變量時會出錯。相應SQLSTATE爲01506(db2 ? 01506): 對 DATE 或TIMESTAMP值進行了調整,以校正算術運算得出的無效日期。

◆如果要獲取的只是下一月份,可采用的替代方法是獲取當前日期所在月份的第一天作爲基准後+1 MONTHS OR -1 MONTHS

◆8.存儲過程的經驗

搞了半天搞不定,一查原來的文檔才了,原來tmd該死的DB2的存儲過程,是轉換爲C後,進行編譯的。因此在數據庫服務器上要安裝一個C編譯器才能完成存儲過程的編譯。並且需要使用DB2SET命令,設置DB2_SQLROUTINE_COMPILER_PATH指向C編譯器的安裝路徑。如:db2set

DB2_SQLROUTINE_COMPILER_PATH=E:ProgramFilesMicrosoftVisualStudioVC98Binvcvars32.bat

◆9.對變量的賦值不能用select ..into ..方式而要用set v=(select ..)的方式,代碼示例如下。

drop function SXFM.ISORDERSUBMITDATE;

CREATE FUNCTION SXFM.ISORDERSUBMITDATE(IN_ROW_ID DECIMAL(16,0))

RETURNS DATE

LANGUAGE SQL

BEGIN ATOMIC

DECLARE V_SUBMIT_DATE DATE;

DECLARE V_SELL_ID DECIMAL(16, 0);

DECLARE V_BUY_ID DECIMAL(16, 0);

set V_SELL_ID = (SELECT COALESCE(RECEIVE_ID,-1) FROM IS_ORDER WHERE ROW_ID=IN_ROW_ID);

set V_BUY_ID = (SELECT COALESCE(PAY_ID,-1) FROM IS_ORDER WHERE ROW_ID=IN_ROW_ID);

set V_SUBMIT_DATE = (SELECT DATE(MAX(A.SUBMIT_DATE)) FROM AM_AUDIT_QUEUE A,SM_USER B,SM_USER C

WHERE A.TABLE_CODE='IS_ORDER' AND A.TABLE_ROW_ID=IN_ROW_ID

AND A.AUDIT_EMP_ID=C.ROW_ID AND C.BRANCH_ID=V_BUY_ID --審核方爲付款方

AND A.SUBMIT_EMP_ID=B.ROW_ID AND B.BRANCH_ID=V_SELL_ID); --提交方爲收款方

RETURN V_SUBMIT_DATE;

END;

#SYNC 10;

◆10.DB2的遊標打開後遇到commit和rollback默認是會關閉的。保持遊標打開的方法是在定義遊標時加上with hold選項

◆11.F:導出某張表的數據,且該表包含long varchar型數據,該如何操作Q:Export:db2 connect to [dbname] user [user] using [password]db2move [dbname] export -tn

◆1.安裝DB2後可以通過命令窗口這樣的命令行方式或控制中心這樣的圖形界面方式來操作,而如果你的數據庫服務端不在本機,則還需要在「客戶機配置輔助程序」中做一個客戶端連接的配置。 ◆2.控制中心中無法增刪改數據,只能編寫sql語句來實現而quest提供的工具雖然能增加數據,但居然無法用複制、粘貼和Tab鍵,必須逐個輸入,然後用鼠標點擊切換現存數據看來可以在單元格中編輯修改,但實際卻無法commit,呵呵,還是老老實實寫update語句,至于刪除數據,更是非寫delete語句不可。不過可以用pb以單元格方式編輯數據,相應的一個缺點是編輯數據的按鈕和刪除表的按鈕太近,萬一點錯了刪除表的按鈕,pb可是不作提示就把表給刪了的,faint ◆3.DB2的視圖裏不能直接用order by語句,必須這樣寫 select × from(select a,b,c from table1 order by a)as tab 這種寫法的前提是你已經打過補丁了 ◆4.存儲過程的問題: DB2提供ltrim函數和rtrim函數,但偏偏不提供trim函數,如果你希望去除字符兩端的空格,對不起,必須用ltrim(rtrim()) 的方式調用insert 語句裏面居然不能用表達式賦值,必須把值先賦給一個變量調用其他存儲過程時竟然不能用常量做參數,必須把這個常量的值賦給一個變量,再以這個變量爲參數 select * from table fetch first n rows only 語句居然在存儲過程裏不可用 ◆5.存儲過程裏可以使用動態sql,但函數裏卻不可以使用 ◆6. 遇到commit或rollback時自動關閉遊標,所以需要慎重使用單獨提交。 proc builder老是在調試中內存不足,屏幕花掉。而如果斷點調試時暫停不進行下去的時間稍微長一點就會提示超時,受不了。 ◆7.開發中遇到的一個問題 ◆在使用日期變量+1 MONTHS OR 日期變量-1 MONTHS 的方式取日期時,比如日期變量值爲 2004-02-29時,存儲過程裏將日期變量+1 MONTHS 賦值給另一 日期變量時會出錯。相應SQLSTATE爲01506(db2 ? 01506): 對 DATE 或TIMESTAMP值進行了調整,以校正算術運算得出的無效日期。 ◆如果要獲取的只是下一月份,可采用的替代方法是獲取當前日期所在月份的第一天作爲基准後+1 MONTHS OR -1 MONTHS ◆8.存儲過程的經驗 搞了半天搞不定,一查原來的文檔才了,原來tmd該死的DB2的存儲過程,是轉換爲C後,進行編譯的。因此在數據庫服務器上要安裝一個C編譯器才能完成存儲過程的編譯。並且需要使用DB2SET命令,設置DB2_SQLROUTINE_COMPILER_PATH指向C編譯器的安裝路徑。如:db2set DB2_SQLROUTINE_COMPILER_PATH=E:ProgramFilesMicrosoftVisualStudioVC98Binvcvars32.bat ◆9.對變量的賦值不能用select ..into ..方式而要用set v=(select ..)的方式,代碼示例如下。 drop function SXFM.ISORDERSUBMITDATE; CREATE FUNCTION SXFM.ISORDERSUBMITDATE(IN_ROW_ID DECIMAL(16,0)) RETURNS DATE LANGUAGE SQL BEGIN ATOMIC DECLARE V_SUBMIT_DATE DATE; DECLARE V_SELL_ID DECIMAL(16, 0); DECLARE V_BUY_ID DECIMAL(16, 0); set V_SELL_ID = (SELECT COALESCE(RECEIVE_ID,-1) FROM IS_ORDER WHERE ROW_ID=IN_ROW_ID); set V_BUY_ID = (SELECT COALESCE(PAY_ID,-1) FROM IS_ORDER WHERE ROW_ID=IN_ROW_ID); set V_SUBMIT_DATE = (SELECT DATE(MAX(A.SUBMIT_DATE)) FROM AM_AUDIT_QUEUE A,SM_USER B,SM_USER C WHERE A.TABLE_CODE='IS_ORDER' AND A.TABLE_ROW_ID=IN_ROW_ID AND A.AUDIT_EMP_ID=C.ROW_ID AND C.BRANCH_ID=V_BUY_ID --審核方爲付款方 AND A.SUBMIT_EMP_ID=B.ROW_ID AND B.BRANCH_ID=V_SELL_ID); --提交方爲收款方 RETURN V_SUBMIT_DATE; END; #SYNC 10; ◆10.DB2的遊標打開後遇到commit和rollback默認是會關閉的。保持遊標打開的方法是在定義遊標時加上with hold選項 ◆11.F:導出某張表的數據,且該表包含long varchar型數據,該如何操作Q:Export:db2 connect to [dbname] user [user] using [password]db2move [dbname] export -tn [tablename] -u [user] -p[password] (單表)db2move [dbname] export -tn [tablename1,tablename2,...] -u [user] -p [password] (多表)Import:db2move [dbname] import
󰈣󰈤
王朝萬家燈火計劃
期待原創作者加盟
 
 
 
>>返回首頁<<
 
 
 
 
 熱帖排行
 
 
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有