Я создал пакет, который содержит хранимую процедуру, которую я планирую вызвать из отдельного приложения. Хранимая процедура вернет отсортированный список всех представлений и таблиц в схеме. Для этого он выполняет простой выбор по синонимам 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
Когда я дважды щелкаю по этому второму сообщению об ошибке, SQL Developer переводит меня в первое предложение FROM («FROM DBA_TABLES»).
Так что я довольно озадачен. Я хорошо знаю SQL Server, и я новичок в Oracle, поэтому, пожалуйста, потерпите Если бы вы могли дать некоторые подсказки или указать мне верное направление, я был бы очень признателен.
Заранее спасибо!