- PR -

【PL/SQL】別ユーザでのストアドプロシージャ実行について

1
投稿者投稿内容
not_seldom
会議室デビュー日: 2006/10/04
投稿数: 2
投稿日時: 2007-07-26 18:43
<環境>
Oracle9i Enterprise 9.2.0.1.0
SI Object Browser 9.0.1.4

いつも拝見させて頂いております。

一つ質問があります。

VB.NET(2003)からOracleに接続して、PL/SQLを呼び出しておりますが、
別ユーザを変数で渡した場合、ストアドプロシージャを呼び出せません。
当方の環境上、複数のDBに跨る処理を行う場合、VBでINIファイルから
取得する制御をしております。

【userA】
ProcAA

【userB】
ProcBB
TableBB
(ProcBBはTableBBのみの処理)

コマンドラインで取得したユーザ(userA)のProcAAの途中で、
別ユーザ(userB)のProcBBを呼び出そうとしていますが、
うまくいきません。

ProcAA内部で、VBから渡した別ユーザ(userB)とProcBBを結合させようと
思ったのですが・・・(DMLはうまくいっています)

以下、ProcAAの内部の処理になります。
strProcBBをVarchar2で宣言し、
strProcBB := USR || '.ProcBB(引数1、引数2…)'; -- USRはユーザ名を格納する変数

Execute Immediate strProcBB ←ここでエラー

「ORA-00900:SQL文が無効です。
 ORA-06512:"UserA.ProcAA",行177
 ORA-06512:行2」
エラーメッセージからみると、SQLではないので当然なのですが・・・。
変数があるため、下記のような書き方もできません。

USR || '.ProcBB(引数1、引数2…)';


ユーザが他にも存在する可能性があるため、変数で取得したいのですが、
できないのであれば、ProcBBをuserAに移動して、
TableBBを更新するのも止むを得ないかとも少々・・・

もし可能であれば、ご教授願えないでしょうか?

因みに、、
UserB.ProcBB(引数1、引数2…);
と、ユーザ名を固定長にすれば、実行できるので権限の問題ではないと思います。

宜しくお願いします。
saki1208
ベテラン
会議室デビュー日: 2006/08/22
投稿数: 86
投稿日時: 2007-07-26 19:01
saki1208です。

シノニムを定義するなどしなければ、他ユーザのストアドは実行できません。
not_seldom
会議室デビュー日: 2006/10/04
投稿数: 2
投稿日時: 2007-07-27 11:29
saki1208 様

> シノニムを定義するなどしなければ、他ユーザのストアドは実行できません。

ご教示頂いた方法にて、無事処理を行うことができました。
勉強になりました。

ありがとうございました。
1

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