ストアドプロシージャ内からdba_tab_colsから選択できません(PL / SQL)
-
03-07-2019 - |
質問
ストアドプロシージャ内から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を取得します このテーブルは確かに存在しますが 彼は選択する権利を与えられた このテーブル。問題はそれです 手続きは役割を尊重しません。のみ 直接付与された権利は尊重されます。 つまり、テーブルの所有者は 選択する権利を再付与する:
oracleはインストールしていませんが、おそらくdataTypeは予約語です。他のことを試してみます。