- PR -

シェルからのPL/SQLプロシージャ−呼び出し

1
投稿者投稿内容
まだらねこ
会議室デビュー日: 2006/01/18
投稿数: 3
投稿日時: 2006-01-18 14:09
シェルからOracle PL/SQLで作成したプロシージャーの呼び出した時に
OUTパラメータをシェルに返す方法がわかりません。

≪プロシージャー本体≫-----------
CREATE OR REPLACE PROCEDURE db.sp_test(
FILE_NAME IN  VARCHAR2, -- ファイル名
LOG_FNAME  IN  VARCHAR2, -- ログファイル名
RET    OUT  NUMBER -- 復帰コード
)
IS
BEGIN
.....
EXCEPTION
...
END;
/

----------ここまで

上記プロシージャ−を下記のシェルから呼び出そうとしています。

≪呼び出し元のシェル≫−−−−−−−−−
#!/bin/csh
clear
echo ""
echo " 処理開始します"
echo -n " よろしいですか?(y/n)"
set answer = $<

if($answer == 'y') then
#入力引数定義
set log_fname1 = "'proc_1.log'";
set test_fname1 = "'test_CONV_1.tsv'";

echo $test_fname1
echo $log_fname1

sqlplus db/db <<++ >> /dev/null

-- テスト@
spool test_spool.log
VAR R NUMBER;
exec sp_test( FILE_NAME => $test_fname1, LOG_FNAME =>$log_fname1, RET => :R); -- @
PRINT R
spool off
++
set $ret = R; -- これはだめでした

-- テストA
spool test_spool.log
exec sp_test( FILE_NAME => $test_fname1, LOG_FNAME =>$log_fname1, RET => :$ret); -- A
spool off
++

endif
-------------------ここまで

テスト@の方法で実行するとRには正常な値が入っています(スプールファイルtest_spool.logに入っています)。
しかし、これをシェル側へ返したいので、Aの方法でやってみると、「$retは未定義です」
というエラーをシェルが返してきて、プロシージャ−は実行できません。

どなたかストアドプロシージャ−の出力パラメータを
シェルで受け取る方法をご存知の方は教えてください。

よろしくお願いします。
もしもし
ぬし
会議室デビュー日: 2004/10/15
投稿数: 280
投稿日時: 2006-01-18 14:27
SQL*Plus の終了時に

コード:
exit :r



...って指定してもだめですかね。

_________________
もしもし@RMAN 友の会
まだらねこ
会議室デビュー日: 2006/01/18
投稿数: 3
投稿日時: 2006-01-18 17:54
もしもしさん、さっそくのご回答ありがとうございます。

しかし、

SQL*Plusの最後に

exit :R

としてから、

シェル側に戻ってきてから

echo $R としても
echo R としても
echo :R としても

Rを変数として入っているべき値は出力されませんでした。。。
もしもし
ぬし
会議室デビュー日: 2004/10/15
投稿数: 280
投稿日時: 2006-01-19 11:38
引用:

しかし、

SQL*Plusの最後に

exit :R

としてから、

シェル側に戻ってきてから

echo $R としても
echo R としても
echo :R としても

Rを変数として入っているべき値は出力されませんでした。。。



もしかしたら私勘違いしていたかもしれない...。
exit :r は SQL*Plus の終了ステータスを指定するものだったから、
echo $r ではなくて、echo $status とか echo $? の類になるのでは。
だいいち、"R" はシェルで定義した変数ではないですし。

# csh なら echo $status になる?
# $? は sh を使用する場合みたい。

_________________
もしもし@RMAN 友の会

[ メッセージ編集済み 編集者: もしもし 編集日時 2006-01-19 11:43 ]
まだらねこ
会議室デビュー日: 2006/01/18
投稿数: 3
投稿日時: 2006-01-19 18:15
いろいろやってみましたが、どうにもこうにもならなかったので、
変数Rは出力パラメータにせず、ストアドプロシージャ−内で
ファイルに出力し、シェル側でそのファイルをcatし、
結果を変数にとることにしました。

もしもしさん、いろいろありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)