文章詳情頁(yè)
DB2編程序小小技巧
瀏覽:137日期:2023-03-24 09:22:44
正在看的db2教程是:DB2編程序小小技巧。
一些編程經(jīng)驗(yàn),與大家共享!
1 DB2編程
1.1 建存儲(chǔ)過(guò)程時(shí)CREATE 后一定不要用TAB鍵 3
1.2 使用臨時(shí)表 3
1.3 從數(shù)據(jù)表中取指定前幾條記錄 3
1.4 游標(biāo)的使用 4
注意commit和rollback 4
游標(biāo)的兩種定義方式 4
修改游標(biāo)的當(dāng)前記錄的方法 5
1.5 類(lèi)似DECODE的轉(zhuǎn)碼操作 5
1.6 類(lèi)似CHARINDEX查找字符在字串中的位置 5
1.7 類(lèi)似DATEDIF計(jì)算兩個(gè)日期的相差天數(shù) 5
1.8 寫(xiě)UDF的例子 5
1.9 創(chuàng)建含IDENTITY值(即自動(dòng)生成的ID)的表 6
1.10 預(yù)防字段空值的處理 6
1.11 取得處理的記錄數(shù) 6
1.12 從存儲(chǔ)過(guò)程返回結(jié)果集(游標(biāo))的用法 6
1.13 類(lèi)型轉(zhuǎn)換函數(shù) 8
1.14 存儲(chǔ)過(guò)程的互相調(diào)用 8
1.15 C存儲(chǔ)過(guò)程參數(shù)注意 8
1.16 存儲(chǔ)過(guò)程FENCE及UNFENCE 8
1.17 SP錯(cuò)誤處理用法 9
1.18 IMPORT用法 9
1.19 VALUES的使用 9
1.20 給SELECT 語(yǔ)句指定隔離級(jí)別 10
1.21 ATOMIC及NOT ATOMIC區(qū)別 10
2 DB2編程性能注意 10
2.1 大數(shù)據(jù)的導(dǎo)表 10
2.2 SQL語(yǔ)句盡量寫(xiě)復(fù)雜SQL 10
2.3 SQL SP及C SP的選擇 10
2.4 查詢(xún)的優(yōu)化(HASH及RR_TO_RS) 11
2.5 避免使用COUNT(*) 及EXISTS的方法 11
3 DB2表及SP管理 12
3.1 看存儲(chǔ)過(guò)程文本 12
3.2 看表結(jié)構(gòu) 12
3.3 查看各表對(duì)SP的影響(被哪些SP使用) 12
3.4 查看SP使用了哪些表 12
3.5 查看FUNCTION被哪些SP使用 12
3.6 修改表結(jié)構(gòu) 12
4 DB2系統(tǒng)管理 13
4.1 DB2安裝 13
4.2 創(chuàng)建DATABASE 14
4.3 手工做數(shù)據(jù)庫(kù)遠(yuǎn)程(別名)配置 14
4.4 停止啟動(dòng)數(shù)據(jù)庫(kù)實(shí)例 14
4.5 連接數(shù)據(jù)庫(kù)及看當(dāng)前連接數(shù)據(jù)庫(kù) 14
4.6 停止啟動(dòng)數(shù)據(jù)庫(kù)HEAD 15
4.7 查看及停止數(shù)據(jù)庫(kù)當(dāng)前的應(yīng)用程序 15
4.8 查看本INSTANCE下有哪些DATABASE 15
4.9 查看及更改數(shù)據(jù)庫(kù)HEAD的配置 16
4.9.1 改排序堆的大小 16
4.9.2 改事物日志的大小 16
4.9.3 出現(xiàn)程序堆內(nèi)存不足時(shí)修改程序堆內(nèi)存大小 16
4.10 查看及更改數(shù)據(jù)庫(kù)實(shí)例的配置 16
4.10.1 打開(kāi)對(duì)鎖定情況的監(jiān)控。 16
4.10.2 更改診斷錯(cuò)誤捕捉級(jí)別 17
4.11 DB2環(huán)境變量 17
4.12 DB2命令環(huán)境設(shè)置 17
4.13 改變隔離級(jí)別 17
4.14 管理DB\INSTANCE的參數(shù) 18
4.15 升級(jí)后消除版本問(wèn)題 18
4.16 查看數(shù)據(jù)庫(kù)表的死鎖 18
1 DB2編程
1.1 建存儲(chǔ)過(guò)程時(shí)Create 后一定不要用TAB鍵
create procedure
的create后只能用空格,而不可用tab健,否則編譯會(huì)通不過(guò)。
切記,切記。
1.2 使用臨時(shí)表
要注意,臨時(shí)表只能建在user tempory tables space 上,如果database只有system tempory table space是不能建臨時(shí)表的。
另外,DB2的臨時(shí)表和sybase及oracle的臨時(shí)表不太一樣,DB2的臨時(shí)表是在一個(gè)session內(nèi)有效的。所以,如果程序有多線程,最好不要用臨時(shí)表,很難控制。
建臨時(shí)表時(shí)最好加上 with replace選項(xiàng),這樣就可以不顯示的drop 臨時(shí)表,建臨時(shí)表時(shí)如果不加該選項(xiàng)而該臨時(shí)表在該session內(nèi)已創(chuàng)建且沒(méi)有drop,這時(shí)會(huì)發(fā)生錯(cuò)誤。
1.3 從數(shù)據(jù)表中取指定前幾條記錄
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;
選第一條記錄的字段到一個(gè)變量以以下方式代替
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 游標(biāo)的使用
注意commit和rollback
使用游標(biāo)時(shí)要特別注意如果沒(méi)有加with hold 選項(xiàng),在Commit和Rollback時(shí),該游標(biāo)將被關(guān)閉。Commit 和Rollback有很多東西要注意。特別小心
游標(biāo)的兩種定義方式
一種為
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;
這種方式使用起來(lái)比較復(fù)雜,但也比較靈活。特別是可以使用with hold 選項(xiàng)。如果循環(huán)內(nèi)有commit或rollback 而要保持該cursor不被關(guān)閉,只能使用這種方式。
&n
一些編程經(jīng)驗(yàn),與大家共享!
1 DB2編程
1.1 建存儲(chǔ)過(guò)程時(shí)CREATE 后一定不要用TAB鍵 3
1.2 使用臨時(shí)表 3
1.3 從數(shù)據(jù)表中取指定前幾條記錄 3
1.4 游標(biāo)的使用 4
注意commit和rollback 4
游標(biāo)的兩種定義方式 4
修改游標(biāo)的當(dāng)前記錄的方法 5
1.5 類(lèi)似DECODE的轉(zhuǎn)碼操作 5
1.6 類(lèi)似CHARINDEX查找字符在字串中的位置 5
1.7 類(lèi)似DATEDIF計(jì)算兩個(gè)日期的相差天數(shù) 5
1.8 寫(xiě)UDF的例子 5
1.9 創(chuàng)建含IDENTITY值(即自動(dòng)生成的ID)的表 6
1.10 預(yù)防字段空值的處理 6
1.11 取得處理的記錄數(shù) 6
1.12 從存儲(chǔ)過(guò)程返回結(jié)果集(游標(biāo))的用法 6
1.13 類(lèi)型轉(zhuǎn)換函數(shù) 8
1.14 存儲(chǔ)過(guò)程的互相調(diào)用 8
1.15 C存儲(chǔ)過(guò)程參數(shù)注意 8
1.16 存儲(chǔ)過(guò)程FENCE及UNFENCE 8
1.17 SP錯(cuò)誤處理用法 9
1.18 IMPORT用法 9
1.19 VALUES的使用 9
1.20 給SELECT 語(yǔ)句指定隔離級(jí)別 10
1.21 ATOMIC及NOT ATOMIC區(qū)別 10
2 DB2編程性能注意 10
2.1 大數(shù)據(jù)的導(dǎo)表 10
2.2 SQL語(yǔ)句盡量寫(xiě)復(fù)雜SQL 10
2.3 SQL SP及C SP的選擇 10
2.4 查詢(xún)的優(yōu)化(HASH及RR_TO_RS) 11
2.5 避免使用COUNT(*) 及EXISTS的方法 11
3 DB2表及SP管理 12
3.1 看存儲(chǔ)過(guò)程文本 12
3.2 看表結(jié)構(gòu) 12
3.3 查看各表對(duì)SP的影響(被哪些SP使用) 12
3.4 查看SP使用了哪些表 12
3.5 查看FUNCTION被哪些SP使用 12
3.6 修改表結(jié)構(gòu) 12
4 DB2系統(tǒng)管理 13
4.1 DB2安裝 13
4.2 創(chuàng)建DATABASE 14
4.3 手工做數(shù)據(jù)庫(kù)遠(yuǎn)程(別名)配置 14
4.4 停止啟動(dòng)數(shù)據(jù)庫(kù)實(shí)例 14
4.5 連接數(shù)據(jù)庫(kù)及看當(dāng)前連接數(shù)據(jù)庫(kù) 14
4.6 停止啟動(dòng)數(shù)據(jù)庫(kù)HEAD 15
4.7 查看及停止數(shù)據(jù)庫(kù)當(dāng)前的應(yīng)用程序 15
4.8 查看本INSTANCE下有哪些DATABASE 15
4.9 查看及更改數(shù)據(jù)庫(kù)HEAD的配置 16
4.9.1 改排序堆的大小 16
4.9.2 改事物日志的大小 16
4.9.3 出現(xiàn)程序堆內(nèi)存不足時(shí)修改程序堆內(nèi)存大小 16
4.10 查看及更改數(shù)據(jù)庫(kù)實(shí)例的配置 16
4.10.1 打開(kāi)對(duì)鎖定情況的監(jiān)控。 16
4.10.2 更改診斷錯(cuò)誤捕捉級(jí)別 17
4.11 DB2環(huán)境變量 17
4.12 DB2命令環(huán)境設(shè)置 17
4.13 改變隔離級(jí)別 17
4.14 管理DB\INSTANCE的參數(shù) 18
4.15 升級(jí)后消除版本問(wèn)題 18
4.16 查看數(shù)據(jù)庫(kù)表的死鎖 18
1 DB2編程
1.1 建存儲(chǔ)過(guò)程時(shí)Create 后一定不要用TAB鍵
create procedure
的create后只能用空格,而不可用tab健,否則編譯會(huì)通不過(guò)。
切記,切記。
1.2 使用臨時(shí)表
要注意,臨時(shí)表只能建在user tempory tables space 上,如果database只有system tempory table space是不能建臨時(shí)表的。
另外,DB2的臨時(shí)表和sybase及oracle的臨時(shí)表不太一樣,DB2的臨時(shí)表是在一個(gè)session內(nèi)有效的。所以,如果程序有多線程,最好不要用臨時(shí)表,很難控制。
建臨時(shí)表時(shí)最好加上 with replace選項(xiàng),這樣就可以不顯示的drop 臨時(shí)表,建臨時(shí)表時(shí)如果不加該選項(xiàng)而該臨時(shí)表在該session內(nèi)已創(chuàng)建且沒(méi)有drop,這時(shí)會(huì)發(fā)生錯(cuò)誤。
1.3 從數(shù)據(jù)表中取指定前幾條記錄
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;
選第一條記錄的字段到一個(gè)變量以以下方式代替
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 游標(biāo)的使用
注意commit和rollback
使用游標(biāo)時(shí)要特別注意如果沒(méi)有加with hold 選項(xiàng),在Commit和Rollback時(shí),該游標(biāo)將被關(guān)閉。Commit 和Rollback有很多東西要注意。特別小心
游標(biāo)的兩種定義方式
一種為
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;
這種方式使用起來(lái)比較復(fù)雜,但也比較靈活。特別是可以使用with hold 選項(xiàng)。如果循環(huán)內(nèi)有commit或rollback 而要保持該cursor不被關(guān)閉,只能使用這種方式。
&n
[1] [2] [3] [4] [5] [6] 下一篇
標(biāo)簽:
DB2
相關(guān)文章:
1. sql語(yǔ)句LEFT JOIN拼接表詳解2. C# 連接Access數(shù)據(jù)時(shí)總報(bào)找不到dbo.mdb的問(wèn)題3. SQLServer創(chuàng)建索引的5種方法小結(jié)4. MySQL字段為 NULL的5大坑5. SQL?DNSlog注入實(shí)戰(zhàn)6. SQLite3 命令行操作指南7. 使用Oracle進(jìn)行數(shù)據(jù)庫(kù)備份與還原8. SQLite 性能優(yōu)化實(shí)例分享9. SQLite教程(二):C/C++接口簡(jiǎn)介10. SQLite中的WAL機(jī)制詳細(xì)介紹
排行榜
