PL/SQL MYコーディングルール
■フィールド変数のデータ型はかならず%TYPEを使用すべ
フィールドを格納する変数のデータ型には、必ず%TYPEを使用すること。
■FORよりもFORALLを使うべ
FORALLはパフォーマンスが30%程度向上する。FORALLが使用できないか検討してみること。
■空行は作成すな
空行のかわりに–を使用する。SHOW ERRORしたときに空行があるとエラーのあった行数がずれる為。
例)
---------------------------------------------–
vc2_result VARCHAR2 DEFAULT := ‘OK’;
BEGIN
RETURN vc2_result;
END OUT_FILES;
---------------------------------------------–
|
↓
---------------------------------------------–
vc2_result VARCHAR2 DEFAULT := ‘OK’;
BEGIN
RETURN vc2_result;
END OUT_FILES;
---------------------------------------------–
■変数の型によるプリフィックスを付与すべ
vc2_ VARCHAR2 vc2_from_ymd cur_ CURSOR cur_list_master rec_ RECORD rec_dept_line tbl_ TABLE tbl_code_master bin_ BINARY_INTEGER bin_count pin_ PLS_INTEGER pin_count bln_ BOOLEAN bin_off dat_ DATE dat_from chr_ CHAR chr_buf num_ NUMBER num_count
例外
グローバルな変数にはgを使用すべ
例)gvc2_to_ymd
var %TYPEの場合は何型になるかわからないのでvarを使用する。(variable)
■RECORD型定義,TYPE型定義,例外型定義などの定義関係
型の定義はすべて大文字とする。単語と単語は(アンダースコア)でつなぐ。
■関数の名称
関数の名称の本体部分には、用途を表す完結した名前を大文字と(アンダースコア)を使用して付けること。
さらに、プロシージャ名は INIT_NAME_ARRAY やCLOSE_FILEPOINTER のように動詞で始める。
■関数の引数
inまたはoutまたはinoutをプリフィックスに使用する。
例)
PROCEDURE NIPPOU_CONSULT_OUTPUT(
in_symd IN VARCHAR2,
out_ret OUT VARCHAR2
);
■定数
プリフィックスにCONを使用し、すべて大文字とする。
CON_NO_DATA CONSTANT VARCHAR2(1) := ‘3’;
CON_ERROR CONSTANT VARCHAR2(1) := ‘1’;
CON_NORMAL_END CONSTANT VARCHAR2(1) := ‘2’;
■例外処理を必ず実装する。
例外処理は、必ず実装する。よくやるのがEXCEPTION WHEN OTHES THEN NULL;とか。そんなコードを書くな。
例) FUNCTION "CHAMPLE" RETURN VARCHAR2 AS -- 宣言部 -- sqlerr_code NUMBER; sqlerr_msg VARCHARE2(2046); -- BEGIN -- 実行部 -- -- ---------------- -- 処理を記述 -- ---------------- -- --COMMIT; -- トランザクションがある場合 -- 実行部のトランザクションをコミット RETURN('RETURN from CHAMPLE'); EXCEPTION -- 例外部 -- WHEN OTHERS THEN -- ROLLBACK; -- トランザクションがある場合 -- 実行部のトランザクションをロールバック -- sqlerr_code := SQLCODE; sqlerr_msg := substrb(SQLERRM, 1, 1024); -- -- 状況の表示処理例 -- DBMS_OUTPUT.PUT_LINE('sql error code = ' || sqlerr_code); -- DBMS_OUTPUT.PUT_LINE('sql error msg = ' || sqlerr_msg); -- -- -- 状況の保存処理例 -- INSERT INTO EXCEPTION_LOG VALUES('FNC_YYY', sqlerr_code, sqlerr_msg, SYSDATE); -- COMMIT; -- -- -- 呼び出し元に例外処理の内容を返す -- RAISE; -- -- ※上記のINSERT文が有っても,その前の例外が伝えられます。 -- ※上記のINSERT文で例外が発生した場合にはINSERT文の例外も上ります。 -- ※sqlerr_msgには2つの例外メッセージが連結されて呼び出し側に伝わります。 -- 必要に応じて「ORA-」で切り出す。 -- ※INSERT文で例外が発生した場合、sqlerr_codeにはINSERT文で発生した例外番号が -- 格納される。 END;