スマートフォン・ジン | Smartphone-Zine

引っ越し先→ https://smartphone-zine.com/

PL/SQL コーディング規約

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;