別のアプリケーションから呼び出す予定のストアド プロシージャを含むパッケージを作成しました。ストアド プロシージャは、スキーマ内のすべてのビューとテーブルの並べ替えられたリストを返します。これを行うには、次に示すように、DBA_TABLES および DBA_VIEWS シノニムに対して単純な選択を実行します。
CREATE OR REPLACE
PACKAGE BODY TITAN_ENTITY AS
PROCEDURE GETSCHEMAOBJECTS (RESULTS IN OUT T_CURSOR)
IS
V_CURSOR T_CURSOR;
BEGIN
OPEN V_CURSOR FOR
SELECT 'T' OBJECTTYPE, TABLE_NAME OBJECTNAME
FROM DBA_TABLES
WHERE OWNER = 'SONAR5'
UNION ALL
SELECT 'V' OBJECTTYPE, VIEW_NAME OBJECTNAME
FROM DBA_VIEWS
WHERE OWNER = 'SONAR5'
ORDER BY OBJECTNAME;
RESULTS := V_CURSOR;
END GETSCHEMAOBJECTS;
END TITAN_ENTITY;
問題のシノニムが存在し、公開されていることを確認しました。
CREATE PUBLIC SYNONYM "DBA_TABLES" FOR "SYS"."DBA_TABLES"
CREATE PUBLIC SYNONYM "DBA_VIEWS" FOR "SYS"."DBA_VIEWS"
私の理解では、それらは公開されているため、それらにアクセスするための追加の権限は必要ありません。その理解が間違っている場合は、誰かが私の概念を誤解させ、より正確なデータを指摘してくれることを願っています.
ここで私の問題があります。Oracle SQL Developer でワークシートを開き、これらのテーブルから問題なく選択できます。意味のあるデータをうまく取得できます(実際には567行)。しかし、ストアド プロシージャを実行しようとすると、以下に示すように、Oracle はコンパイル エラーを返します。
Error(9,8): PL/SQL: SQL Statement ignored
Error(10,16): PL/SQL: ORA-00942: table or view does not exist
2 番目のエラー メッセージをダブルクリックすると、SQL Developer によって最初の FROM 句 ("FROM DBA_TABLES") に移動します。
だから私はかなり困惑しています。SQL Server はよく知っていますが、Oracle は初めてなので、ご容赦ください。手がかりを提供していただけるか、正しい方向に向けていただければ幸いです。
前もって感謝します!