2016-12-19 3 views
-2

タスクを自動化するためのストアドプロシージャを作成しています。別のユーザーのスキーマにあるビューからデータを選択する必要があります。他のスキーマのビューを使用するためのOracleストアドプロシージャ

私はストアドプロシージャの外でそのビューからデータを照会することはできますが、明らかに私のスキーマの下にあるSPでは照会できません。

これは設計によるものですか、何か不足していますか?回避策はありますか?

おかげ

+0

コードバディを投稿してください! – JT4U

+0

[help/on-topic]から: "質問のデバッグに役立つ質問(「なぜこのコードは機能しませんか?)」には、問題の内容、エラー、および質問自体に再現するのに必要な最短コード明確な問題文がない質問は、他の読者にとっては有用ではありません。参照:[mcve]を作成する方法。 – Aleksej

答えて

1

もっと問題を解明しようとしている答えよりコメント。答えは、次のコードまたはBoneistのコメントにあると思います。

ビューに必要な権限を与えても、別のスキーマからビューを照会するときにSPが機能しない理由はありません。例えば

、私は、スキーマのHRでビューを作成して、私のユーザーに

SQL> conn hr/###@xe 
Connected. 
SQL> create or replace view testView as select 1 as one from dual; 

View created. 

SQL> grant select on testView to alek; 

Grant succeeded. 

SELECT権限を与えた後、私は、私のスキーマの中から自分のスキーマに

SQL> conn alek/###@xe 
Connected. 
SQL> create or replace procedure testSelectView is 
    2 begin 
    3 for i in (select * from hr.testView) loop 
    4  dbms_output.put_line(i.one); 
    5 end loop; 
    6 end; 
    7/

Procedure created. 

を手順を構築している場合クエリとプロシージャの両方の作業:

SQL> select * from hr.testView; 

     ONE 
---------- 
     1 

SQL> exec testSelectView; 
1 

PL/SQL procedure successfully completed. 
+2

OPの状況では、OPのスキーマに与えられた役割と役割にテーブルの権限が与えられています。助成金があなたの答えで実証したテーブルに直接与えられた場合、それはうまくいくでしょう。 – Boneist

+1

@Boneist:私が疑問を抱いていたのは、OPが特権の問題を抱えていた場合です(この場合、問題があなたの言うこととまったく同じだと思います)。それ。 – Aleksej

+0

ああええ。今私はOPの質問のあいまいさを見ることができると言っています。ホーハム! – Boneist

1

特権の問題。 PL/SQLブロック内には、に直接が付与されている権限しかありませんが、ロール(たとえば、DBAロール)によって付与された権限は適用されません。

実行grant select on ... to ...;またはgrant select any table to ...;の場合、動作するはずです。

関連する問題