#sql #database #oracle #notifications #sqlplus
#sql #База данных #Oracle #уведомления #sqlplus
Вопрос:
Я пытаюсь зарегистрироваться для уведомления об изменении СУБД, однако я получаю сообщение об ошибке, в котором указывается, что необходимо объявить DBMS_CHANGE_NOTIFICATION.
Ниже приведен мой код SQL:
DECLARE
regid NUMBER;
BEGIN
--Deregister any existing change notification...
BEGIN
SELECT regid INTO regid FROM dba_change_notification_regs WHERE LOWER(table_name) LIKE '%aws_app_change_notif';
IF (regid IS NOT NULL) THEN
DBMS_OUTPUT.PUT_LINE('Deregistered aws_app_change_notif');
DBMS_CHANGE_NOTIFICATION.DEREGISTER(regid);
END IF;
EXCEPTION
WHEN NO_DATA_FOUND THEN
DBMS_OUTPUT.PUT_LINE('No change notification found for table aws_app_change_notif');
END;
--Register change notification...
DECLARE
regds SYS.CHNF$_REG_INFO;
regid NUMBER;
dept_id NUMBER;
qosflags NUMBER;
operations_filter NUMBER;
max_id NUMBER;
BEGIN
qosflags := DBMS_CHANGE_NOTIFICATION.QOS_RELIABLE DBMS_CHANGE_NOTIFICATION.QOS_ROWIDS;
operations_filter := DBMS_CHANGE_NOTIFICATION.INSERTOP;
regds := SYS.CHNF$_REG_INFO ('aws_app_change_notif_callback', qosflags, 0,operations_filter,0);
regid := DBMS_CHANGE_NOTIFICATION.NEW_REG_START (regds);
SELECT max(id) INTO max_id FROM aws_app_change_notif;
DBMS_CHANGE_NOTIFICATION.REG_END;
END;
END;
и после выполнения я получаю сообщение об ошибке ниже:
DBMS_CHANGE_NOTIFICATION.ОТМЕНА РЕГИСТРАЦИИ (regid); ОШИБКА в строке 9:
ORA-06550: строка 9, столбец 13: PLS-00201: должен быть объявлен идентификатор ‘DBMS_CHANGE_NOTIFICATION’
ORA-06550: строка 9, столбец 13: PL / SQL: оператор игнорируется
ORA-06550: строка 25, столбец 21: PLS-00201: должен быть объявлен идентификатор ‘DBMS_CHANGE_NOTIFICATION’
ORA-06550: строка 25, столбец 9: PL / SQL: оператор игнорируется
ORA-06550: строка 26, столбец 30: PLS-00201: должен быть объявлен идентификатор ‘DBMS_CHANGE_NOTIFICATION’
ORA-06550: строка 26, столбец 9: PL / SQL: оператор игнорируется
ORA-06550: строка 28, столбец 18: PLS-00201: должен быть объявлен идентификатор ‘DBMS_CHANGE_NOTIFICATION’
ORA-06550: строка 28, столбец 9: PL / SQL: оператор игнорируется
ORA-06550: строка 29, столбец 41: PL / SQL: ORA-00942: таблица или представление не существует
ORA-06550: строка 29, столбец 9: PL / SQL: оператор SQL игнорируется
ORA-06550: строка 30, столбец 9: PLS-00201: должен быть объявлен идентификатор ‘DBMS_CHANGE_NOTIFICATION’
ORA-06550: строка 30, столбец 9: PL / SQL: оператор игнорируется
Я использую Oracle Database 18c Express Edition выпуска 18.0.0.0.0 — Production в качестве своей базы данных.
Может кто-нибудь посоветовать, что здесь не так.
Комментарии:
1. Предоставлен ли вашему пользователю / схеме доступ к DBMS_CHANGE_NOTIFICATION?
2. Похоже, что у вашей учетной записи нет разрешения на выполнение в пакете DBMS_CHANGE_NOTIFICATION.
3. @BobJarvis Да, у меня нет разрешения на предоставление. После предоставления разрешения на выполнение я не получил никаких ошибок. Спасибо за помощь
Ответ №1:
У меня нет правильных разрешений, которые вызвали проблему.
После предоставления разрешения я смог устранить ошибку.
Хорошее объяснение с примером можно найти здесь