Я могу просмотреть результат, когда пишу запрос вне блока, но запись его внутри функции показывает ошибку.
SELECT max(logid) FROM hawk.log_patch_execution_result;
Выход:
461
Функция:
CREATE OR REPLACE FUNCTION latest_log_id RETURN NUMBER IS
v_log_id NUMBER;
v_sql VARCHAR2(4000);
BEGIN
SELECT max(logid) INTO v_log_id FROM hawk.log_patch_execution_result;
RETURN v_log_id;
END latest_log_id;
/
Выход:
Create function, executed in 16 ms
PL/SQL: ORA-00942: table or view does not exist
PL/SQL: SQL Statement ignored
Total execution time 16 ms
2 ответа
Выбранная вами таблица принадлежит пользователю hawk
.
Пользователю, который использует функцию, должна быть предоставлена привилегия SELECT
(в этой таблице). Я предполагаю, что вы это сделали (поскольку сам SELECT
работает нормально, но не как часть функции) - через какую-то роль. Однако это не сработает - вы должны предоставить привилегию напрямую пользователю, а не через роль.
Кажется, проблема в схеме / пользователе, с которым вы работаете. Попробуйте скомпилировать его таким образом, добавив имя схемы в функцию.
CREATE OR REPLACE FUNCTION hawk.latest_log_id RETURN NUMBER IS
v_log_id NUMBER;
v_sql VARCHAR2(4000);
BEGIN
SELECT max(logid) INTO v_log_id FROM hawk.log_patch_execution_result;
RETURN v_log_id;
END latest_log_id;
/
Похожие вопросы
Новые вопросы
sql
Язык структурированных запросов (SQL) - это язык запросов к базам данных. Вопросы должны включать примеры кода, структуру таблицы, примеры данных и тег для используемой реализации СУБД (например, MySQL, PostgreSQL, Oracle, MS SQL Server, IBM DB2 и т. Д.). Если ваш вопрос относится исключительно к конкретной СУБД (использует определенные расширения / функции), используйте вместо этого тег этой СУБД. Ответы на вопросы, помеченные SQL, должны использовать стандарт ISO / IEC SQL.