ORA-00942 ошибка при запуске кода для создания триггера, который вставляет строки из представлений словаря данных - PullRequest
1 голос
/ 10 мая 2019

Я создаю таблицу, которая принимает имя таблицы / представления, дату создания и имя создателя, как только таблица будет построена. Я написал триггер для того же, который использует оператор вставки и получает необходимые данные из user_objects, user_tables и v $ session. Однако при запуске триггера появляется ошибка «PL / SQL: ORA-00942: таблица или представление не существует».

CREATE OR REPLACE TRIGGER CREATE_TRIGGER
AFTER CREATE ON SCHEMA
BEGIN
 INSERT INTO NEW_OBJ_TRACKER (TBL_OR_VW_NAME, CREATED_DATE_TIME, LAST_QUERIED_DATE, CREATOR)
SELECT T4.* , T5.* FROM
 (
 SELECT OBJECT_NAME, CREATED, LAST_ANALYZED
 FROM SYS.USER_OBJECTS T1 LEFT JOIN SYS.USER_TABLES T2
 ON T1.OBJECT_NAME = T2.TABLE_NAME
 ORDER BY CREATED DESC
 ) T4,
 (
 SELECT OSUSER
 FROM SYS.v$session
 ORDER BY SQL_EXEC_START
 ) T5
 WHERE ROWNUM = 1
 ;
 END;
/

Когда я запускаю только оператор вставки, я не получаю ошибки, и результаты в порядке.

1 Ответ

2 голосов
/ 10 мая 2019

Ваш триггер запрашивает sys.v$session. Привилегии для таблиц v $ предоставляются через роль и не могут использоваться в процедурах, функциях или триггерах.

Чтобы ваш триггер мог запрашивать таблицу v $, вам нужно предоставить его непосредственно владельцу триггера, например, (запустите это как SYS):

grant select on v_$session to [user];

(замените [user] владельцем вашего триггера).

...