0

重複の可能性:
Oracle の PL/SQL 関数が 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; 
4

2 に答える 2

0

エラー メッセージは、DBMS_AQ が不明であることを示しています。これは SYS が所有する Oracle パッケージであるため、存在します。したがって、それを見て実行する権利がありません。

走った?

grant EXECUTE ON DBMS_AQ to appuser;

あなたの以前の質問の1つに対する私の回答に明示的に示されているように?

于 2012-12-26T11:25:23.380 に答える
0

DBMS_AQ pkg をチェックして、使用したプロシージャの必須パラメータを見つけてください。

以下のクエリはキューに役立ちます。

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;
于 2012-12-26T12:16:00.533 に答える