- - PR -
【PL/SQL】別ユーザでのストアドプロシージャ実行について
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 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…); と、ユーザ名を固定長にすれば、実行できるので権限の問題ではないと思います。 宜しくお願いします。 |
|
投稿日時: 2007-07-26 19:01
saki1208です。
シノニムを定義するなどしなければ、他ユーザのストアドは実行できません。 |
|
投稿日時: 2007-07-27 11:29
saki1208 様
> シノニムを定義するなどしなければ、他ユーザのストアドは実行できません。 ご教示頂いた方法にて、無事処理を行うことができました。 勉強になりました。 ありがとうございました。 |
1