[前の記事]« [win2000]ATで設定したプログラムが実行されない
[次の記事]ネットワーク上のUNIXサーバにあるバッチファイルがクライアントPCでうまく動かない »

関連オンラインソフト配布サイト:
Vector>ダウンロード(top) |>MS-DOSまたは汎用 | >WindowsVista/XP/2000/NT

▲カテゴリー「SQLとコマンド・プロンプト」索引へ

[SQL]ストアドファンクションの戻り値の取得

907.
ストアドファンクションの戻り値の取得
2004年10月06日(水) 17時08分
プッチョ
●DOS/Windowsのバージョン↓
DOS:Microsoft Windows XP [Version 5.1.2600]
Windows:XP

ストアドファンクションをバッチプログラムから
呼び出し、ファンクションの戻り値によって
その後の処理を変えたいのですが
どうすれば、戻り値を取れるか分かりません。
SQL*Plusからの実行であれば可能ですが
戻り値をSQL*Plusの呼び元へ受け渡すことができません。
どなたかご存知ありませんか?
912.
Re:ストアドファンクションの戻り値の取得
2004年10月07日(木) 12時03分
ココア
こんにちは。

私の場合は戻り値をファイルに書き出して、とりあえずは
解決しました。他に良い方法はないですかね。

DOS BATCH:
sqlplus -silent -L %ORAID% @%sqldir%EXEC_COCOA.sql %aaa% %bbb%
rem --- PL/SQL戻り値判別
FOR /f %%A in (c:\xxx\rtn_cocoa) DO SET /a rtnPLSQL=%%A
IF NOT %rtnPLSQL%==0 CALL :err %errPAKitoen%

EXEC_COCOA.sql:
DECLARE
n_rtn number;
w_file         UTL_FILE.FILE_TYPE;
v_outdir CONSTANT VARCHAR2(50) := 'd:\user\ココア\';
v_fileNM CONSTANT VARCHAR2(50) := 'RTN_COCOA';
v_writeMode CONSTANT VARCHAR2(1) := 'W';
C_FILE_MAX_RECLEN CONSTANT NUMBER := 32767;

BEGIN
n_rtn := aaa.func_cocoa('&1', '&2');

-- 戻り値をファイル出力
w_file := UTL_FILE.FOPEN(v_outdir, v_fileNM, v_writeMode, C_FILE_MAX_RECLEN);
UTL_FILE.PUT_LINE(w_file, n_rtn);
UTL_FILE.FCLOSE(w_file);
END;
/
EXIT;

>●DOS/Windowsのバージョン↓
>DOS:Microsoft Windows XP [Version 5.1.2600]
>Windows:XP

>ストアドファンクションをバッチプログラムから
>呼び出し、ファンクションの戻り値によって
>その後の処理を変えたいのですが
>どうすれば、戻り値を取れるか分かりません。
>SQL*Plusからの実行であれば可能ですが
>戻り値をSQL*Plusの呼び元へ受け渡すことができません。
>どなたかご存知ありませんか?
913.
Re:ストアドファンクションの戻り値の取得
2004年10月10日(日) 23時46分
ふぇむ
ふぇむと申します。以下の件について。

>ストアドファンクションをバッチプログラムから
>呼び出し、ファンクションの戻り値によって
>その後の処理を変えたいのですが
>どうすれば、戻り値を取れるか分かりません。
>SQL*Plusからの実行であれば可能ですが
>戻り値をSQL*Plusの呼び元へ受け渡すことができません。
>どなたかご存知ありませんか?

私も専門家ではありませんが....
スクリプトの解釈される階層は

CMDバッチスクリプト → SQL*Plus → SQLブロック(PL/SQLブロック)

となっていると思います。で、SQL*Plus は PL/SQLではない独自の構文を持っていることに注意、です。つまり、SQL*Plusの構文を用いて PL/SQL 実行部分の値を受け取って CMDバッチスクリプト側へ返すことになります。

手元に環境がなくて試せませんが、SQL*Plus のコマンドである DEFINE や VARIABLE などでユーザ変数またはバインド変数を定義してそこに値を受け取り、SQL*Plusのコマンドである EXIT コマンドにその値を渡して sqlplus を終了すれば値が CMDバッチスクリプト側の %errorlevel% で取り出せたりしないでしょうか。

また SQL*Plus 上で結果を標準出力に返すようにして、それを CMDバッチスクリプト側で for /F 文等を用いて解析し取得することも可能だと思います。
989.
Re:ストアドファンクションの戻り値の取得
2004年11月18日(木) 18時14分
ちょび
>●DOS/Windowsのバージョン↓
>DOS:Microsoft Windows XP [Version 5.1.2600]
>Windows:XP

>ストアドファンクションをバッチプログラムから
>呼び出し、ファンクションの戻り値によって
>その後の処理を変えたいのですが
>どうすれば、戻り値を取れるか分かりません。
>SQL*Plusからの実行であれば可能ですが
>戻り値をSQL*Plusの呼び元へ受け渡すことができません。
>どなたかご存知ありませんか?

サンプルですが、
DOSバッチからファンクションを呼び出す方法です。
%errorlevel%で戻り値を取得できると思います
【test.bat】
sqlplus user/password@testdb @test.sql
echo %errorlevel%
【test.sql】
WHENEVER SQLERROR EXIT 9
var i number
exec :i := test_function
exit :i
【test_function】
CREATE OR REPLACE FUNCTION TEST_FUNCTION RETURN NUMBER IS
wk_return number;
BEGIN
wk_return := 0 ;
return wk_return;
END;
/
 
 


カテゴリー「SQLとコマンド・プロンプト」索引へ

 

カテゴリー一覧

FPCU/FPCDIY QUICK LINK online
この上の各ジャンル名をクリックすると、下のウィンドウが切り替わります▼


=リンク集のインデックスはこちら=

資料書籍

About

2004年10月06日 11:08に投稿されたエントリーのページです。

ひとつ前の投稿は「[win2000]ATで設定したプログラムが実行されない」です。

次の投稿は「ネットワーク上のUNIXサーバにあるバッチファイルがクライアントPCでうまく動かない」です。

他にも多くのエントリーがあります。メインページアーカイブページも見てください。

This site is powered by Six Apart
Movable Type 3.33-ja
このブログについて | 運営:有限会社メディアポート