質問

ストアドプロシージャ内からdba_tab_colsビューからSELECTしようとしています。動作しておらず、その理由はわかりません。

次のSQLをクエリとして実行する場合:

SELECT t.data_type FROM dba_tab_cols t
WHERE 
    t.table_name = 'ACCOUNTTYPE' AND 
    t.column_name = 'ACCESSEDBY';

正常に動作します。ただし、次のようなストアドプロシージャにコピーした場合:

SELECT t.data_type INTO dataType FROM dba_tab_cols t
WHERE
    t.table_name = 'ACCOUNTTYPE' AND 
    t.column_name = 'ACCESSEDBY';

エラーメッセージ「PL / SQL:ORA-00942:テーブルまたはビューが存在しません」が表示されます;エディターはコンパイルを試みている間にdba_tab_colsを強調表示します。両方のケースで同じdbユーザーが使用されています。

dataTypeは次のように宣言されます:     dataType varchar2(128);

PL / SQL(Oracle 9)

誰もが問題を知っていますか?

役に立ちましたか?

解決

ほとんどの場合、権限の問題です。ロールを介して dba_tab_columns にアクセスする権限はありますか、それともユーザーへの直接的な選択許可ですか?ロールを介して付与された権限は、SPROCSでは使用できません。

Googleのクイックルックでは、代わりに all_tab_cols を使用し、そのテーブルに必要な情報が含まれているかどうかを確認することをお勧めします。

他のヒント

Eoinの答えに追加するには:

  

ほとんどの人にとって、それは   ユーザーが選択できないことに驚く   プロシージャ内からのテーブル   彼は選択を許可されていません   直接(を介してではなく)   役割)

     

テーブルユーザーがこれをコンパイルしようとした場合   手順、彼はORA-00942を取得します   このテーブルは確かに存在しますが   彼は選択する権利を与えられた   このテーブル。問題はそれです   手続きは役割を尊重しません。のみ   直接付与された権利は尊重されます。   つまり、テーブルの所有者は   選択する権利を再付与する:

http://www.adp-gmbh.ch/ora/err /ora_00942.html

oracleはインストールしていませんが、おそらくdataTypeは予約語です。他のことを試してみます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top