2012-04-11 21 views
3

プロシージャを作成し、その中に次の文を使用しました。

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

私はその所有者がPUBLICある同義語をチェックして、次のエラーPL/SQL: ORA-00942: table or view does not exist

を取得していますので、この場合に実行する必要がありますが、その作業はありません。

私はselect sql_id from v_$sql where sql_text =v_sql;の簡単なエディタでこれを行うことができます。誰でもこれを手伝ってください。

+0

私のシステムでは、ビューは 'v_ $ sql'ではなく' v $ sql'と呼ばれます。 – Codo

+0

@Codo:私のV $ sqlのみ、それは 'sys'スキーマの下にあります –

答えて

6

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

のでthis article

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 

で述べたように、あなたはPL/SQLブロックで使用できるように、すべてのdictionayビューにSELECTを付与するために、次を試してみてください。

grant select any dictionary to USERNAME 
+0

:これは' grant select on v $ sql to 'で動作します、ありがとう –

1

おそらく、使用しているユーザーが選択権限ではなく役割を介してビューに直接アクセスしている可能性があります。

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

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

+0

私はDBAに同じことを尋ねます。 –

0

私の答えはhereです。特定の大文字をどこかで使用している可能性があります。

関連する問題