9

プロシージャを作成し、その中で以下のステートメントを使用しました。

select sql_id into v_sql_id from v_$sql where sql_text =v_sql;

次のエラーが発生しますPL/SQL: ORA-00942: table or view does not exist

所有者の同義語を確認したPUBLICので、この場合は実行する必要がありますが、機能していません。

select sql_id from v_$sql where sql_text =v_sql;シンプルなエディターでこれができるもう1つのこと。誰かがこれを手伝ってくれる?

4

3 に答える 3

16

データベース ディクショナリ関連またはシステム テーブル (この場合は v_$sql) は Oracle ユーザーが所有しており、sysそれらにアクセスするには特別な権限が必要です。データ ディクショナリ ビューにアクセスするには、 Oracle データベースにログインするsysdba userか、これらの権限を取得する必要があります (DBA がこれを支援してくれる場合があります)。

この記事で述べたように

The problem is that procedures don't respect roles; only directly granted rights 
are respected. So, that means that table_owner has to regrant the right to select

したがって、次のようにして、すべてのディクショナリ ビューで SELECT を許可し、pl/sql ブロッ​​クで使用できるようにします。

grant select any dictionary to USERNAME
于 2012-04-11T07:10:21.543 に答える
1

ほとんどの場合、使用しているユーザーには、選択権限を直接付与するのではなく、役割を通じてビューへのアクセス権が付与されています。

残念ながら、ロールを通じて取得した権限は、PL/SQL の実行時にはアクティブになりません。

SELECT 権限をユーザーに直接付与するよう DBA に依頼する必要があります。

于 2012-04-11T07:10:36.490 に答える