VIEWのCREATE文中で定数を使いたい
SQL
2004年05月31日
この場合は、定数を返却するFUNCTIONを作成し、
CREATE文中では、そのFUNCTIONを参照することで実現できる。
JOINを使った外部結合・・(+)を使わない
SQL
2004年05月31日
例)
FROM A LEFT JOIN B ON A.Key = B.Key
→RIGHT JOIN
→OUTER JOIN(両方にあってもなくても取得)
自動でカウントアップするような値を持ちたい(Oracle)
SQL
2004年05月31日
例)
CREATE SEQUENCE testseq 〜 ← シーケンス作成
SELECT testseq.CURRVAL FROM DUAL ← 現在のシーケンスの値を参照
SELECT testseq.NEXTVAL FROM DUAL ← 次のシーケンスの値を参照 ※参照した時点でカウントアップ
SQL文で、ある月の最終日を取得したい場合
SQL
2004年05月31日
例)
SELECT LAST_DAY(TO_DATE('20040120')) FROM 〜
@検索結果
20040131・・・DATE型で返却される。
PL/SQLのカーソルの使い分け
SQL
2004年05月31日
複数件を求める場合は。カーソルを使用。
PL/SQLのIF文でのNULL値の扱い
SQL
2004年05月31日
NULL値はISNULL以外の条件式を無視する。
例)
IF a < b THEN ← aにNULL、bにNULLでも結果はELSEになる
・・・・
ELSE
・・・・
END IF;
SQLの中でIF文を使いたい(Oracle)
SQL
2004年05月31日
SQL文中で、IF文論理を使用できる。
例)
SELECT SUM(CASE WHEN B='1' THEN A
ELSE A*-1 END)〜
2、DECODE式で可能・・・値を比較し結果を戻す。
例)
SELECT DECODE(a_id, 1, 'a',
2, 'b',
3, 'c',
'd' ← どれにも当てはまらない場合(DEFAULT値)
)
FROM 〜
※a_idが1の場合は、'a'を返す。。。
1回のSQLで小計、合計を計算するには(Oracle)
SQL
2004年05月31日
・・・GroupBy句に使用する。検索結果がツリー構造イメージで返ってくる。
(対象件数が1件であっても、複数件返って来ることになる)
パフォーマンスはいいらしい。。
例)
@検索SQL
SELECT table_a.COL1, table_b.COL2, SUM(table_c.COL3)
FROM table_a, table_b, table_c
WHERE 〜
GROUP BY ROLLUP (table_a.COL1, table_b.COL2);
@検索結果
COL1 COL2 COL3
−−−−−−−−−−−−−−−−−−−−−−−−−−−
XXXX YY 10
XXXX YY 20
XXXX 30 ←小計取得
WWWW ZZ 5
WWWW ZZ 10
WWWW 15 ←小計取得
90 ←合計取得
SQLの実行計画
SQL
2004年05月31日
※SQL*PLUSで、”set autotrace on”コマンドの実行後、
SQLを実行することで、測定できる。
SQL*PLUSでPL/SQL内のデバッグを行うには
SQL
2004年05月31日
例)
--PL/SQL内でデバッグを行いたい箇所に挿入
DBMS_OUTPUT.PUT_LINE(〜);
※SQL*PLUSで、”set serveroutput on”コマンドの実行が必要。
PL/SQLでUPDATEした件数を取得したい
SQL
2004年05月31日
例)
wk_cnt := SQL%ROWCOUNT;