単純な呼び出し先として、入力引数を二つ取るプロシージャです。 1) SQL としての呼び出しCALL CSV_OUT('0006','0007')2) 最も単純な PL/SQL ブロックとしての呼び出しbegin CSV_OUT('0006','0007'); end;3) 一時 PL/SQL の一部として呼び出しDECLARE WK_FROM VARCHAR2(4) := '0005'; WK_TO VARCHAR2(4) := '0015'; BEGIN CSV_OUT(WK_FROM,WK_TO); END;
CREATE or REPLACE PROCEDURE CSV_OUT ( PM_STRING1 IN VARCHAR2 ,PM_STRING2 IN VARCHAR2 ) /**********************************************************/ /* 変数の定義 */ /**********************************************************/ AS WK_FILENAME VARCHAR2(100); WK_CHARACTERSET VARCHAR2(100); FILEHANDLE UTL_FILE.FILE_TYPE; CURSOR cur_main IS SELECT * FROM 社員マスタ where 社員コード between PM_STRING1 and PM_STRING2 order by フリガナ; COMMENT_REC cur_main%ROWTYPE; /**********************************************************/ /* 内部プロシージャ( データ出力 ) */ /**********************************************************/ PROCEDURE WRITE_DATA AS WK_CSV VARCHAR2(200); BEGIN /***********************************************/ /* 1行ぶんのデータの作成 */ /***********************************************/ WK_CSV := COMMENT_REC.社員コード; WK_CSV := WK_CSV || ',' || COMMENT_REC.氏名; /***********************************************/ /* AL32UTF8 は、10g Express 対応 */ /***********************************************/ if WK_CHARACTERSET = 'AL32UTF8' then UTL_FILE.PUT_LINE( FILEHANDLE, CONVERT( WK_CSV,'JA16SJIS','AL32UTF8') ); else UTL_FILE.PUTF( FILEHANDLE, '%s\n', WK_CSV ); end if; END; /**********************************************************/ /* 処理開始 */ /**********************************************************/ BEGIN DBMS_OUTPUT.PUT_LINE('デバッグ:開始'); /***********************************************/ /* 行データを変数にセット */ /***********************************************/ SELECT VALUE INTO WK_CHARACTERSET from V$NLS_PARAMETERS where PARAMETER = 'NLS_CHARACTERSET'; /***********************************************/ /* 出力ファイル名を設定 */ /***********************************************/ WK_FILENAME := '社員情報.csv'; if WK_CHARACTERSET = 'AL32UTF8' then WK_FILENAME := CONVERT( WK_FILENAME,'JA16SJIS','AL32UTF8'); end if; OPEN cur_main; FILEHANDLE := UTL_FILE.FOPEN( 'ORACLEDIR', WK_FILENAME, 'w' ); LOOP FETCH cur_main INTO COMMENT_REC; EXIT when cur_main%NOTFOUND; /* 内部プロシージャの呼び出し */ WRITE_DATA; DBMS_OUTPUT.PUT_LINE(COMMENT_REC.氏名); END LOOP; UTL_FILE.FCLOSE( FILEHANDLE ); CLOSE cur_main; /**********************************************************/ /* 一番外側のブロックの例外処理 */ /**********************************************************/ EXCEPTION WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE('例外発生:'||SQLCODE||':'||SQLERRM); END;
|
【Oracle : PL/SQLの最新記事】
- PL/SQL : 最も簡単な CSV 出力 の記述
- PL/SQL : Function と Procedure の簡単なサンプル
- Oracle : PL/SQL Function の使用方法
- Oracle : PL/SQL : 暗黙のカーソルとループブロックを使用した自動行挿入
- Oracle : PL/SQL : SELECT 〜 INTO 構文の一般的な使用方法
- Oracle : PL/SQL : カーソルを使った一般的なループ処理を行うプロシージャ
- Oracle : PL/SQL : Function のサンプルと使い方
- PL/SQL : OUT タイプのパラメータを持つストアードプロシージャの処理
- PL/SQL : Function 雛形