09/03/2006 | jiangws2002 リンク: OTN Japan – 掲示板. >エラーが発生するときに、PL/SQLで戻る値をセットしましたが、起動バッチ >(例えばA.BAT)に渡す方法を教えてもらいませんか?ちなみにSQL*PLUSを >使って、PL/SQLを実行します。(別の方法がありますか?) >よろしくお願いします。 こんばんは。 ちょうど似たような要件があったので、SCOTT.EMPを使って簡単なサンプルを作っ てみました。 PL/SQLプロシジャからの戻り値をコマンドプロンプトで取得する方法です。 ご参考になれば幸いです。 <概略> 1.SQLスクリプトにバインド変数を定義し、その変数プロシジャの戻り値として 実行します。 2.プロシジャでは、戻り値に値をセットします。 3.SQLスクリプトでは、プロシジャからの戻り値(バインド変数)をリターン・ コードとして OSに戻します。 4.DOS(OS)では、ERRORLEVELでリターン・コードを取得します。 以下にサンプルを記述します。(Windows2003ServerSP1:Oracle10gSE (10.1.0.4)にて動作確認) ※入力値チェックなどはしていません(^^;;) ●EMPsample.bat <—— 起動するバッチファイル :RUNSTART SQLPLUS SCOTT/TIGER@xxxx @D:sampleempcount.sql if %ERRORLEVEL% == 999999 goto RUNEND echo ************************************ echo ** %ERRORLEVEL% 人在籍しています echo ** (↑ がプロシジャでセットした戻り値です) echo ************************************ echo off pause :RUNEND rem exit 0 ●EMPCOUNT.sql <—— プロシジャを起動するSQLファイル SET HEADING OFF SET ECHO OFF SET TERMOUT ON SET SERVEROUTPUT ON var intPara number ACCEPT DEPTNO PROMPT “EMP表を参照します。部署コードを入力して下さい (999999で終了): “ EXEC PRO_EMPCOUNT( &DEPTNO,:intPara ) ; SET ECHO OFF SET TERMOUT ON SET SERVEROUTPUT ON EXIT :intPara ●EMPCOUNTPRO.sql <—— プロシジャ作成用SQLファイル CREATE OR REPLACE PROCEDURE SCOTT.PRO_EMPCOUNT( intDEPTNO IN INTEGER DEFAULT 99, intPara OUT INTEGER ) IS TYPE CUTYPE IS REF CURSOR; C1 CUTYPE; REC VARCHAR2(1000); TYPE RECORDSET IS RECORD(COUNT01 INTEGER); C1_REC RECORDSET; strSql VARCHAR(32767) DEFAULT NULL; intError INTEGER ; BEGIN IF intDEPTNO = 999999 THEN intPara := intDEPTNO; RETURN; END IF; intError := 0; intPara := 0; strSql := strSql||’SELECT COUNT(ROWID) FROM SCOTT.EMP WHERE EMP.DEPTNO = ‘||intDEPTNO; OPEN C1 FOR strSql; FETCH C1 INTO C1_REC; IF C1%NOTFOUND THEN /* 抽出データ無し */ intError := 999; GOTO PROC_END; ELSE intPara := C1_REC.COUNT01; END IF; <<PROC_END>> CLOSE C1; RETURN; EXCEPTION WHEN OTHERS THEN intError := SQLCODE; END; /