Не удается зарегистрироваться для уведомления об изменении СУБД, выдается ошибка «необходимо объявить уведомление об изменении СУБД»

#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:

У меня нет правильных разрешений, которые вызвали проблему.

После предоставления разрешения я смог устранить ошибку.

Хорошее объяснение с примером можно найти здесь