6

ストアド プロシージャ内から 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 (オラクル 9)

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

4

3 に答える 3

12

おそらく特権の問題です。ロールを介してアクセスするためのアクセス許可ですか、dba_tab_columns それともユーザーへの直接選択付与ですか?ロールを介して付与された特権は、SPROCSでは使用できません。

グーグルをざっとall_tab_cols見てみると、代わりに使用して、そのテーブルに必要な情報が含まれているかどうかを確認することをお勧めします。

于 2009-04-29T18:34:59.887 に答える
4

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

ほとんどの人にとって、(ロールを介してではなく) 選択権限を直接付与されていない場合、ユーザーがプロシージャ内からテーブルを選択できないことに驚かされます。

表のユーザーがこのプロシージャをコンパイルしようとすると、ORA-00942 が返されますが、この表は確かに存在し、この表を選択する権限が付与されています。問題は、手順が役割を尊重しないことです。直接付与された権利のみが尊重されます。つまり、テーブルの所有者は選択する権利を再付与する必要があります。

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

于 2009-04-29T18:44:36.743 に答える
-1

私はオラクルをインストールしていませんが、おそらく dataType は予約語です。私は何か他のものを試してみます。

于 2009-04-29T18:30:10.100 に答える