2009-04-29 17 views
3

ストアド・プロシージャ内からdba_tab_colsビューからSELECTしようとしています。それは機能していないと私は理由を知らない。私は、クエリとして、以下のSQLを実行した場合ストアド・プロシージャ(PL/SQL)内からdba_tab_colsを選択できません

は:

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

は、それが正常に動作します。私はそうのようなストアドプロシージャにそれをコピーする場合は:コンパイルしようとしているときに、「テーブルまたはビューが存在しません:ORA-00942 PL/SQL」は、エディタのハイライトのdba_tab_cols

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

私は、エラーメッセージが表示されます。どちらの場合も、同じdbユーザーが使用されています。

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

PL/SQL(Oracle 9)

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

答えて

9

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

Googleで簡単に見てみると、all_tab_colsを代わりに使用し、そのテーブルに必要な情報があるかどうかがわかります。 Eoinの答えに追加するには

+0

感謝を!私はGoogleと答えを見つけることができませんでした: –

-1

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

4

:ほとんどの人々のために

、それは彼が右の直接選択 を付与されていない 場合、ユーザはプロシージャ内から テーブルを選択することができないこと 驚きとして来ます( ロールを介してではなく)

は、テーブルのユーザーがこの 手順をコンパイルしようとすると、このテーブルは確か と彼を存在するが、彼はORA-00942 を取得この表を に選択する権利が与えられました。問題は、 プロシージャはロールを尊重しないということです。直接付与された権利 のみが尊重されます。 だから、それはそのテーブルの所有者が 付与しなおす選択する権利を有することを意味する:動作しているようです

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

+0

ありがとう、そのリンクは非常に有用だった。 –

関連する問題