DB2程式設計序技巧 一

2021-08-30 07:41:18 字數 2531 閱讀 3819

1.1     建儲存過程時create 後一定不要用tab鍵

create procedure 的create後只能用空格,而不可用tab健,否則編譯會通不過.切記,切記。

1.2   使用臨時表

要注意,臨時表只能建在user tempory tables space 上,如果database只有      system tempory table space是不能建臨時表的。

另外,db2的臨時表和sybase及oracle的臨時表不太一樣,db2的臨時表是在乙個session內有效的。所以,如果程式有多執行緒,最好不要用臨時表,很難控制。

建臨時表時最好加上   with   replace選項,這樣就可以不顯示的drop 臨時表,建臨時表時如果不加該選項而該臨時表在該session內已建立且沒有drop,這時會發生錯誤。

1.3 從資料表中取指定前幾條記錄

select   *   from tb_market_code fetch first 1 rows only

但下面這種方式不允許

select market_code into v_market_code   from tb_market_code fetch first 1 rows only;     

選第一條記錄的字段到乙個變數以以下方式代替

declare v_market_code char(1);

declare cursor1 cursor for select market_code from tb_market_code

fetch first 1 rows only for update;

open cursor1;

fetch cursor1 into v_market_code;

close cursor1;

1.4    游標的使用

注意commit和rollback

使用游標時要特別注意如果沒有加with hold 選項,在commit和rollback時,該游標將被關閉。   commit 和rollback有很多東西要注意。特別小心

游標的兩種定義方式

一種為

declare continue handler for not found

begin

set v_notfound = 1;

end;

declare cursor1 cursor with hold for select market_code from tb_market_code for update;

open cursor1;

set v_notfound=0;

fetch cursor1 into v_market_code;

while v_notfound=0 do

--work

set v_notfound=0;

fetch cursor1 into v_market_code;

end while;

close cursor1;

這種方式使用起來比較複雜,但也比較靈活。特別是可以使用with hold 選項。如果迴圈內有commit或rollback 而要保持該cursor不被關閉,只能使用這種方式。

另一種為

pcursor1: for loopcs1 as   cousor1   cursor   as

select   market_code   as market_code

from tb_market_code

for update

do end for;

這種方式的優點是比較簡單,不用(也不允許)使用open,fetch,close。

但不能使用with   hold 選項。如果在游標迴圈內要使用commit,rollback則不能使用這種方式。如果沒有commit或rollback的要求,推薦使用這種方式(看來for這種方式有問題)。

修改游標的當前記錄的方法

update tb_market_code set market_code='0' where current of cursor1;

不過要注意將cursor1定義為可修改的游標

declare cursor1 cursor for select market_code from tb_market_code

for update;

for update 不能和group by、 distinct、 order by、 for read only及union, except, or intersect但 union all除外)一起使用。

1.5       類似decode的轉碼操作

oracle中有乙個函式 select decode(a1,'1','n1','2','n2','n3') aa1 from

db2沒有該函式,但可以用變通的方法

select case a1

when '1' then 'n1'

when '2' then 'n2'

else 'n3'

end as aa1 from

DB2程式設計序技巧 一

正在看的db2教程是dcvhllg db2程式設計序技巧 一 1 db2程式設計 1.1 建儲存過程時create 後一定不要用tab鍵 3 1.2 使用臨時表 3 1.3 從資料表中取指定前幾條記錄 3 1.4 游標的使用 4 注意commit和rollback 4 游標的兩種定義方式 4 修改游...

DB2程式設計序技巧

1 db2程式設計 1.1 建儲存過程時create 後一定不要用tab鍵 create procedure 的create後只能用空格,而不可用tab健,否則編譯會通不過。切記,切記。1.2 使用臨時表 要注意,臨時表只能建在user tempory tables space 上,如果databa...

DB2程式設計序技巧 二

1.6 類似charindex查詢字元在字串中的位置 locate y dfdasfay 查詢 y 在 dfdasfay 中的位置。1.7 類似datedif計算兩個日期的相差天數 days date 2001 06 05 days date 2001 04 01 days 返回的是從 0001 0...