PL/SQL 雑記
独立トランザクション
PL/SQLの宣言部(ISからBEGINの間)に次のように記述する。
PRAGMA AUTONOMOUS_TRANSACTION;
- メインのトランザクションから独立したトランザクションとなる。
- プロシージャ(orファンクション)を抜けた時点でトランザクションは開放される。commitしてなければrollbackされると言うこと。
- デッドロックに注意。
CURSORの中身を配列に保持。
LOOOP内でCURSORのOPEN,CLOSEを繰り返さないために。
--カーソル定義 CURSOR C01 IS SELECT ID, NAME FROM HOGE_TABLE; --ROWTYPE定義 R01 C01%ROWTYPE; --コレクション型の定義 TYPE ARRAY IS TABLE OF C01%ROWTYPE; LIST ARRAY := ARRAY(); --コレクションの初期化 I NUMBER := 0; --添え字の定義 OPEN C01; LOOP FETCH C01 INTO R01; EXIT WHEN C01%NOTFOUND; --フェッチ終了したら抜ける。 I := I+1; --添え字をインクリメント LIST.EXTEND(I); --Rowを保持するために配列を拡張する。 LIST(I) := R01; --拡張した領域にRow情報を代入。 END LOOP; CLOSE C01; FOR X IN 1 .. I --こんな感じにカーソルを閉じた後もアクセス可能。 DBMS_OUTPUT.PUT_LINE(LIST(X).ID || LIST(X).NAME); END LOOP;
他にもっといいやり方知っている方、教えてください。
ストアド実行
- 引数、戻り値無しの場合。
exec hoge
- 引数有り、戻り値無しの場合。
exec hoge(1,2,3);
- 引数有り、戻り値有りの場合。
declare x integer; begin x := hoge; end; /
無名プロシージャ宣言と実行。
他のやり方がわかりません。
他のやり方がわかりません。