Log.log(work)

いろんな作業メモ

PL/SQL

cursorの勘違いがなおらない

なんでかなぁ 変数の宣言が先 順序が違うとPLS-00320: この式の型の宣言が不完全か、または形式が誤っています。 となる wk_cd CHAR(02 CHAR) := '00'; CURSUR c1 IS SELECT cd_name FROM hoge WHERE cd = wk_cd ; c1_record c1%type; %NOTFOUNDはカーソル属…

オーバーロード違反と言われたが

違反と言われているカーソルでGREPしても同じ名前のは無いんだが。 何がダメなんだろう。。。 Error(x,y): PLS-00305: 'cursor_test01'(行100)の以前の使用方法が、この使用方法と競合します。 ~~~~~~ と思ったらカーソルの書き方間違えた。 cursor cu…

暗黙カーソルと明示カーソル

カーソル カーソルには二種類あって、暗黙カーソルと明示カーソルに分かれる。 明示カーソル 明示的にOPEN~CLOSEするカーソル(そのまんま)。 OPEN c_1; FETCH c_1 INTO paramCd; CLOSE c_1; 暗黙カーソル 明示カーソル以外のすべてのSQL処理で内部的に使用…

DBMS_METADATA による定義文の取り出し

DBMS_METADATA による定義文の取り出しDBMS_METADATA 使用例 - オラクル・Oracleをマスターするための基本と仕組み DBMS_METADATA 使用例 - オラクル・Oracleをマスターするための基本と仕組み

PL/SQL レベルのエラーハンドル

WHENEVER SQLERROR コマンド SQLを発行しているときに何かしらのエラーが出たら続行するか途中でやめるか、オプションで指定できる。 EXIT(終了)する場合 WHENEVER SQLERROR EXIT [ SUCCESS | FAILURE | WARNING | 戻り値(※)] [ COMMIT | ROLLBACK ] (※) …

時刻の指定

hoge_date='2014-09-20' デフォルトは'DD-MON-YY'.

環境変数

select * from v$nls_parameters;

配列初期化

TYPE TYPE_HOGE IS VARRAY(100) OF VARCHAR2(2); var_hoge TYPE_HOGE := TYPE_HOGE(''); 配列の初期化、とりあえずブランクで。

例外を発生させる

キーワードはRAISE RAISE hogeException で指定の例外を発生させることが可能。 javaで言うなら throw new Exception(); テストで実施するなら RAISE_APPLICATION_ERROR(-20000, 'ほげほげエラー'); と書くと便利。

可変長配列(VARRAY)

形式 TYPE 配列名 IS VARRAY(size) OF データ型 [NOT NULL]; TYPE type_hoge IS VARRAY(99) OF VARCHAR2(2); 配列を使うとき vWK_type_hoge type_hoge := type_hoge(); vWK_type_hoge (1) := '01';

0埋め

http://www.shift-the-oracle.com/sql/number-format-element.html 'hoge' || to_char(1, '00') と打つと、 hoge 01 と、謎のスペースが入るけど、 'hoge' || to_char(1, 'FM00') とすると hoge01 になる。

例外処理

めもめも。 ---何かの処理 Exception WHEN OTHERS THEN --それ以外の例外のときに入るので、この場合、全例外がこのなかにはいる 処理。 end

既存のパッケージ

UTL_FILEとか DBMS_OUTPUTとか、どこかのファイルに処理が書いていないかなーとローカルフォルダをGREPしてもぜんぜん見つからないので変だなと思ったら、 もともと入っているパッケージだった罠。

LOOP文

基本的に3パターン。 基本 LOOP --処理とか --抜けたい場合はEXIT文 IF hoge = NULL EXIT; END IF; END LOOP; FOR-LOOP FOR count IN 0..5 LOOP --処理とか END LOOP; カウントループ0から開始して5回回す。 WHILE-LOOP WHILE hoge = NULL LOOP --処理 END L…

サブプログラム

プロシージャー内の実行部で処理を行う前に宣言部で記述しておくと、実行部でそれを呼び出すことが可能になる。 CREATE OR REPLACE PROCEDURE hoge ( inParam in VARCHAR2, outParam OUT NUMBER ) IS CURSOR curTest IS SELECT xxx, … WHERE … ; PROCEDURE p…