Ошибка при создании процедуры

Возможный дубликат:
PL Функция / SQL в Oracle не может видеть DBMS_AQ

Ниже приведена моя процедура постановки данных в очередь. Во время выполнения процедуры я получаю ошибки компиляции, я не могу найти, где я ошибся. Пожалуйста, помогите мне с решением.

CREATE OR REPLACE PROCEDURE p_enqueue(msg IN VARCHAR2)
AS
PRAGMA AUTONOMOUS_TRANSACTION;
enqueue_options dbms_aq.enqueue_options_t;
message_properties dbms_aq.message_properties_t;
message_handle RAW(16);
BEGIN
dbms_aq.enqueue( queue_name => 'example_queue',
enqueue_options => enqueue_options,
message_properties => message_properties,
payload => message_type(msg),
msgid => message_handle);
COMMIT;
END;

ОШИБКИ:

PLS-00201: должен быть объявлен идентификатор DBMS_AQ

PLS-00320: объявление типа этого выражения неполное или искаженное

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

ОШИБКА ORA-01031: недостаточно прав.

Если это проблема, я запустил приведенный ниже блок pl / sql для постановки сообщения в очередь, процедура успешно создана. Как это возможно, если привилегия отсутствует?

DECLARE
enqueue_options dbms_aq.enqueue_options_t;
message_properties dbms_aq.message_properties_t;
message_handle RAW(16);
message message_typ;

BEGIN
message := message_typ('NORMAL MESSAGE',
'enqueued to msg_queue first.');

dbms_aq.enqueue(queue_name => 'msg_queue', 
enqueue_options => enqueue_options, 
message_properties => message_properties, 
payload => message, 
msgid => message_handle);

COMMIT;
end; 

person user1    schedule 26.12.2012    source источник
comment
посмотрите, предоставили ли вы привилегии, упомянутые в приведенном выше комментарии   -  person Sathyajith Bhat    schedule 26.12.2012


Ответы (2)


В сообщении об ошибке говорится, что DBMS_AQ не знает. Поскольку это пакет Oracle, принадлежащий SYS, он существует. Значит, вы упускаете право увидеть и исполнить его.

Ты бежишь

grant EXECUTE ON DBMS_AQ to appuser;

как явно указано в моем ответе на один из ваших предыдущих вопросов?

person Codo    schedule 26.12.2012
comment
Я отредактировал свой пост, проверьте и дайте мне решение. - person user1; 27.12.2012
comment
Мне интересно, после предоставления привилегий я также получаю эту ошибку PLS-00201: должен быть объявлен идентификатор DBMS_AQ - person user1; 27.12.2012
comment
Команду GRANT необходимо запускать от имени SYS, обладающего достаточными привилегиями. Если вы все еще получаете identifier 'DBMS_AQ' must be declared, вы еще не предоставили привилегию (или не тому пользователю). - person Codo; 27.12.2012
comment
Хорошо, спасибо, что проблема решена, у меня есть еще один запрос, у меня есть входной параметр в созданной мной процедуре, как передать входные данные аргументам. Я использовал set_job_argument_value, но выбрасывал недопустимое значение 1 для атрибута ARGUMENT_POSITION - person user1; 27.12.2012

проверьте пакет DBMS_AQ и выясните, какие параметры являются обязательными для процедуры, которую вы использовали.

нижеприведенные запросы будут полезны для Queue.

SELECT name, enqueue_enabled, dequeue_enabled
FROM user_queues;

SELECT owner, queue_name, queue_table, consumer_name
FROM dba_queue_subscribers;

SELECT queue_name, consumer_name, address, protocol, delivery_mode, queue_to_queue
FROM user_queue_subscribers;

SELECT qname, destination, start_date, start_time, propagation_window, next_time, latency
FROM user_queue_schedules;

SELECT qname, process_name, session_id, instance, last_run_date, last_run_time, current_start_date
FROM user_queue_schedules;

SELECT qname, current_start_time, next_run_date, next_run_time, total_time, total_number
FROM user_queue_schedules;

SELECT qname, total_bytes, max_number, max_bytes, avg_number, avg_size, avg_time
FROM user_queue_schedules;
person Dileep    schedule 26.12.2012