1. ホーム
  2. データベース
  3. デービーツー

DB2プログラミングスキル (1)

2022-01-22 03:21:27
現在視聴中のdb2チュートリアルは:DB2 Programming Tips(1)です。
1 DB2 プログラミング 
1.1 ストアドプロシージャの構築時にCreateの後にTABキーを使用しないように注意する 
作成手順 
createプロシージャの後には、タブではなくスペースしか使えません。そうしないと、コンパイルが通りません。 
思い出せ、思い出せ、思い出せ。 
1.2 テンポラリーテーブルの使用 
tempテーブルはユーザーtemporyテーブルスペースにのみ構築可能であり、データベースにシステムtemporyテーブルスペースしかない場合は、tempテーブルを構築できないことに注意してください。 
また、DB2 のテンポラリテーブルは sybase や oracle のテンポラリテーブルとは異なり、 セッション内で有効なテーブルです。したがって、プログラムが複数のスレッドを持っている場合、それは一時テーブルを使用しない方が良い、それは制御することは困難である。 
テンポラリテーブルの作成時にreplaceでオプションを追加した方が、テンポラリテーブルを表示せずにドロップすることができます。テンポラリテーブルの作成時にオプションを追加せず、セッションでテンポラリテーブルが作成されているのにドロップしない場合、エラーが発生することに注意してください。 
1.3 テーブルから最初の数行を取得する 
select * from tb_market_code fetch first 1 rows only 
しかし、以下は許可されません。 
select market_code into v_market_code  
tb_market_codeから最初の1行のみを取得します。      
最初のレコードのフィールドを変数に選択し、次のように置き換えます。 
宣言 v_market_code char(1); 
declare cursor1 cursor for select market_code from tb_market_code  
更新のために最初の1行だけを取得します。 
cursor1を開く。 
カーソル1をv_market_codeにフェッチします。 
cursor1 を閉じます。 
1.4 カーソルを使う 
なお、コミットやロールバックは 
with holdオプションを追加しないとCommitやRollback時に閉じてしまうカーソルを使用する場合、注意すべき点が多くあります。特に 
カーソルの2つの定義方法 
1つは 
見つからなかった場合の継続ハンドラを宣言する 
始める 
v_notfound = 1 に設定します。 
を終了します。 
select market_code from tb_market_code for update で、cursor1 カーソルをホールドして宣言します。 
cursor1を開く。 
v_notfound=0を設定します。 
カーソル1をv_market_codeにフェッチします。 
while v_notfound=0 Do 
--仕事 
v_notfound=0を設定します。 
カーソル1をv_market_codeにフェッチします。 
end while を実行します。 
cursor1 を閉じます。 
この方法は、使い方がより複雑ですが、柔軟性もあります。特に、with hold オプションを使うことができます。ループの中でコミットやロールバックがあり、カーソルを閉じないようにしたい場合、この方法しかありません。
 もう1つは 
pcursor1: for loopcs1 as cousor1 カーソル as 
select market_code as market_code 
tb_market_codeより 
アップデート用 
する 
を終了します。 
この方法の利点は、よりシンプルで、open,fetch,closeを使用しない(使用させない)ことです。 
しかし、with holdオプションは使えません。カーソルループ内でコミット、ロールバックを使いたい場合、この方法は使えません。コミットやロールバックの要件がない場合は、この方法が推奨されます(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 は GROUP BY、DISTINCT、ORDER BY、FOR READ ONLY、および UNION、EXCEPT、INTERSECT (UNION ALL を除く) と共に使用することはできません。 
1.5 デコードライクなトランスコード操作 
オラクルには関数 select decode(a1,'1','n1','2','n2 ','n3') aa1 from 
db2にはこの機能はありませんが、回避策を使用できます。 
select case a1  
when '1' then 'n1'  
when '2' then 'n2'  
else 'n3' 
  からaa1として終了します。 
1.6 文字列中の文字の位置をcharindexのように探す 
Locate('y','dfdasfay') 
dfdasfay' の 'y' の位置を特定する。 
1.7 2つの日付の差分日数を計算するdatedifと同様の機能 
日(日付('2001-06-05')) - 日