「PL/SQL」の編集履歴(バックアップ)一覧はこちら

PL/SQL」(2008/01/04 (金) 04:58:07) の最新版変更点

追加された行は緑色になります。

削除された行は赤色になります。

-[Oracle]PL/SQL 処理時間計測 #highlight(pl/sql){ DECLARE TIME_BEFORE BINARY_INTEGER; TIME_AFTER BINARY_INTEGER; BEGIN TIME_BEFORE := DBMS_UTILITY.GET_TIME; --//処理実行 TIME_AFTER := DBMS_UTILITY.GET_TIME; DBMS_OUTPUT.PUT_LINE(TIME_AFTER - TIME_BEFORE); END; / --//テストプロシージャ CREATE OR REPLACE PROCEDURE HATASYS1.TEST_SHORI_JIKAN IS TIME_BEFORE BINARY_INTEGER; TIME_AFTER BINARY_INTEGER; BEGIN --//100分の1ミリ秒単位で取得 TIME_BEFORE := DBMS_UTILITY.GET_TIME; FOR i IN 1..100 LOOP DBMS_OUTPUT.PUT_LINE(i); END LOOP; TIME_AFTER := DBMS_UTILITY.GET_TIME; DBMS_OUTPUT.PUT_LINE(TO_CHAR( (TIME_AFTER - TIME_BEFORE)/100) || 'sec'); END; } -[Oracle]PL/SQL 日付(YYYY,MM,DD)妥当性チェック #highlight(pl/sql){ /*********************************************************** このFUNCTIONでは、引数の年、月、日より その日付が 妥当であるかを判定します。 返り値:BOOLEAN ***********************************************************/ FUNCTION DATE_CHECK ( W_YEAR VARCHAR2 := NULL, W_MONTH VARCHAR2 := NULL, W_DATE VARCHAR2 := NULL ) RETURN BOOLEAN IS MONTH1 CONSTANT NUMBER := 31; MONTH2 CONSTANT NUMBER := 28; --//通常の場合の2月の日数 MONTH2_LEAP CONSTANT NUMBER := 29; --//閏年の場合の2月の日数 MONTH3 CONSTANT NUMBER := 31; MONTH4 CONSTANT NUMBER := 30; MONTH5 CONSTANT NUMBER := 31; MONTH6 CONSTANT NUMBER := 30; MONTH7 CONSTANT NUMBER := 31; MONTH8 CONSTANT NUMBER := 31; MONTH9 CONSTANT NUMBER := 30; MONTH10 CONSTANT NUMBER := 31; MONTH11 CONSTANT NUMBER := 30; MONTH12 CONSTANT NUMBER := 31; BEGIN IF W_MONTH ='01' THEN IF TO_NUMBER(W_DATE) <= MONTH1 THEN RETURN TRUE; ELSE RETURN FALSE; END IF; ELSIF W_MONTH = '02' THEN --( ( (strYear%4 == 0)&&(strYear%100 != 0) ) || (strYear%400 == 0) ) ) --//■うるう年のチェック IF ( ( MOD(TO_NUMBER(W_YEAR),4) = 0) AND (MOD(TO_NUMBER(W_YEAR),100) != 0) ) OR (MOD(TO_NUMBER(W_YEAR),400) = 0) THEN IF TO_NUMBER(W_DATE) <= MONTH2_LEAP THEN RETURN TRUE; ELSE RETURN FALSE; END IF; ELSE IF TO_NUMBER(W_DATE) <= MONTH2 THEN RETURN TRUE; ELSE RETURN FALSE; END IF; END IF; ELSIF W_MONTH = '03' THEN IF TO_NUMBER(W_DATE) <= MONTH3 THEN RETURN TRUE; ELSE RETURN FALSE; END IF; ELSIF W_MONTH = '04' THEN IF TO_NUMBER(W_DATE) <= MONTH4 THEN RETURN TRUE; ELSE RETURN FALSE; END IF; ELSIF W_MONTH = '05' THEN IF TO_NUMBER(W_DATE) <= MONTH5 THEN RETURN TRUE; ELSE RETURN FALSE; END IF; ELSIF W_MONTH = '06' THEN IF TO_NUMBER(W_DATE) <= MONTH6 THEN RETURN TRUE; ELSE RETURN FALSE; END IF; ELSIF W_MONTH = '07' THEN IF TO_NUMBER(W_DATE) <= MONTH7 THEN RETURN TRUE; ELSE RETURN FALSE; END IF; ELSIF W_MONTH = '08' THEN IF TO_NUMBER(W_DATE) <= MONTH8 THEN RETURN TRUE; ELSE RETURN FALSE; END IF; ELSIF W_MONTH = '09' THEN IF TO_NUMBER(W_DATE) <= MONTH9 THEN RETURN TRUE; ELSE RETURN FALSE; END IF; ELSIF W_MONTH = '10' THEN IF TO_NUMBER(W_DATE) <= MONTH10 THEN RETURN TRUE; ELSE RETURN FALSE; END IF; ELSIF W_MONTH = '11' THEN IF TO_NUMBER(W_DATE) <= MONTH11 THEN RETURN TRUE; ELSE RETURN FALSE; END IF; ELSIF W_MONTH = '12' THEN IF TO_NUMBER(W_DATE) <= MONTH12 THEN RETURN TRUE; ELSE RETURN FALSE; END IF; ELSE --//どの場合にも当てはまらない、入力値がおかしい時 RETURN FALSE; END IF; END; }
-[Oracle]PL/SQL 処理時間計測 #highlight(pl/sql){ DECLARE TIME_BEFORE BINARY_INTEGER; TIME_AFTER BINARY_INTEGER; BEGIN TIME_BEFORE := DBMS_UTILITY.GET_TIME; --//処理実行 TIME_AFTER := DBMS_UTILITY.GET_TIME; DBMS_OUTPUT.PUT_LINE(TIME_AFTER - TIME_BEFORE); END; / --//テストプロシージャ CREATE OR REPLACE PROCEDURE HATASYS1.TEST_SHORI_JIKAN IS TIME_BEFORE BINARY_INTEGER; TIME_AFTER BINARY_INTEGER; BEGIN --//100分の1ミリ秒単位で取得 TIME_BEFORE := DBMS_UTILITY.GET_TIME; FOR i IN 1..100 LOOP DBMS_OUTPUT.PUT_LINE(i); END LOOP; TIME_AFTER := DBMS_UTILITY.GET_TIME; DBMS_OUTPUT.PUT_LINE(TO_CHAR( (TIME_AFTER - TIME_BEFORE)/100) || 'sec'); END; } -[Oracle]PL/SQL 日付(YYYY,MM,DD)妥当性チェック #highlight(pl/sql){ /*********************************************************** このFUNCTIONでは、引数の年、月、日より その日付が 妥当であるかを判定します。 返り値:BOOLEAN ***********************************************************/ FUNCTION DATE_CHECK ( W_YEAR VARCHAR2 := NULL, W_MONTH VARCHAR2 := NULL, W_DATE VARCHAR2 := NULL ) RETURN BOOLEAN IS MONTH1 CONSTANT NUMBER := 31; MONTH2 CONSTANT NUMBER := 28; --//通常の場合の2月の日数 MONTH2_LEAP CONSTANT NUMBER := 29; --//閏年の場合の2月の日数 MONTH3 CONSTANT NUMBER := 31; MONTH4 CONSTANT NUMBER := 30; MONTH5 CONSTANT NUMBER := 31; MONTH6 CONSTANT NUMBER := 30; MONTH7 CONSTANT NUMBER := 31; MONTH8 CONSTANT NUMBER := 31; MONTH9 CONSTANT NUMBER := 30; MONTH10 CONSTANT NUMBER := 31; MONTH11 CONSTANT NUMBER := 30; MONTH12 CONSTANT NUMBER := 31; BEGIN IF W_MONTH ='01' THEN IF TO_NUMBER(W_DATE) <= MONTH1 THEN RETURN TRUE; ELSE RETURN FALSE; END IF; ELSIF W_MONTH = '02' THEN --( ( (strYear%4 == 0)&&(strYear%100 != 0) ) || (strYear%400 == 0) ) ) --//■うるう年のチェック IF ( ( MOD(TO_NUMBER(W_YEAR),4) = 0) AND (MOD(TO_NUMBER(W_YEAR),100) != 0) ) OR (MOD(TO_NUMBER(W_YEAR),400) = 0) THEN IF TO_NUMBER(W_DATE) <= MONTH2_LEAP THEN RETURN TRUE; ELSE RETURN FALSE; END IF; ELSE IF TO_NUMBER(W_DATE) <= MONTH2 THEN RETURN TRUE; ELSE RETURN FALSE; END IF; END IF; ELSIF W_MONTH = '03' THEN IF TO_NUMBER(W_DATE) <= MONTH3 THEN RETURN TRUE; ELSE RETURN FALSE; END IF; ELSIF W_MONTH = '04' THEN IF TO_NUMBER(W_DATE) <= MONTH4 THEN RETURN TRUE; ELSE RETURN FALSE; END IF; ELSIF W_MONTH = '05' THEN IF TO_NUMBER(W_DATE) <= MONTH5 THEN RETURN TRUE; ELSE RETURN FALSE; END IF; ELSIF W_MONTH = '06' THEN IF TO_NUMBER(W_DATE) <= MONTH6 THEN RETURN TRUE; ELSE RETURN FALSE; END IF; ELSIF W_MONTH = '07' THEN IF TO_NUMBER(W_DATE) <= MONTH7 THEN RETURN TRUE; ELSE RETURN FALSE; END IF; ELSIF W_MONTH = '08' THEN IF TO_NUMBER(W_DATE) <= MONTH8 THEN RETURN TRUE; ELSE RETURN FALSE; END IF; ELSIF W_MONTH = '09' THEN IF TO_NUMBER(W_DATE) <= MONTH9 THEN RETURN TRUE; ELSE RETURN FALSE; END IF; ELSIF W_MONTH = '10' THEN IF TO_NUMBER(W_DATE) <= MONTH10 THEN RETURN TRUE; ELSE RETURN FALSE; END IF; ELSIF W_MONTH = '11' THEN IF TO_NUMBER(W_DATE) <= MONTH11 THEN RETURN TRUE; ELSE RETURN FALSE; END IF; ELSIF W_MONTH = '12' THEN IF TO_NUMBER(W_DATE) <= MONTH12 THEN RETURN TRUE; ELSE RETURN FALSE; END IF; ELSE --//どの場合にも当てはまらない、入力値がおかしい時 RETURN FALSE; END IF; END; } -[Oracle]PL/SQL 例外処理 #highlight(pl/sql){ ■主キー制約違反 EXCEPTION --//一意制約違反 WHEN DUP_VAL_ON_INDEX THEN DBMS_OUTPUT.PUT_LINE('データの重複有り'); ROLLBACK; ■その他例外発生時 EXCEPTION WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE(SQLERRM); DBMS_OUTPUT.PUT_LINE(SQLCODE); ROLLBACK; ■ユーザ定義例外 ここでは、例として、「REQUIRED_ITEM_EXCEPTION」を 定義するものとする。 ①宣言部 /*■独自例外定義■*/ --//新規ユーザ追加用のデータの必須項目がNULLだった場合 REQUIRED_ITEM_EXCEPTION EXCEPTION; ②実行部 --//例外を投げる。 RAISE REQUIRED_ITEM_EXCEPTION; ③例外処理部 EXCEPTION --//新規ユーザ登録に必要な項目のNULLチェック WHEN REQUIRED_ITEM_EXCEPTION THEN DBMS_OUTPUT.PUT_LINE('SQLERRM'|| SQLERRM); DBMS_OUTPUT.PUT_LINE('SQLCODE'||SQLCODE); ROLLBACK; }

表示オプション

横に並べて表示:
変化行の前後のみ表示: