J'ai un problème avec Oracle 9.2 et JMS. J'ai créé une routine PL/SQL pour envoyer du texte XML (à partir du fichier ou CLOB) à la file d'attente, mais cette routine ne compile pas.La fonction PL/SQL dans Oracle ne peut pas voir DBMS_AQ
Mon code ressemble (un message de remplissage omis):
create or replace procedure jms_test(msg varchar2)
is
id pls_integer;
message sys.aq$_jms_stream_message;
enqueue_options dbms_aq.enqueue_options_t;
message_properties dbms_aq.message_properties_t;
msgid raw(16);
java_exp exception;
v_filehandle_input utl_file.file_type;
v_newline varchar2(32767);
pragma exception_init(java_exp, -24197);
begin
message := sys.aq$_jms_stream_message.construct;
message.set_string_property('FROM', 'TEST');
id := message.clear_body(-1);
end;
Et Oracle raports que:
Error(6,21): PLS-00201: identifier 'DBMS_AQ' must be declared
J'ai regardé certains newsgroups et essayé tout ce que je trouvais, mais sans succès.
accordé (avec succès) de nombreux permisions
- DES RESSOURCES DE SUBVENTION à l'utilisateur;
- GRANT CONNEXION à l'utilisateur;
- ACCORD EXÉCUTER TOUTE PROCÉDURE À l'utilisateur;
- GRANT aq_administrator_role TO utilisateur;
- GRANT aq_user_role TO utilisateur;
- EXECUTION GRANT SUR dbms_aqadm TO utilisateur;
- EXECUTION GRANT SUR dbms_aq TO utilisateur;
- EXECUTION GRANT SUR dbms_aqin TO utilisateur;
desc dbms_aq montre de nombreuses fonctions comme DEQUEUE, ENQUEUE, ECOUTER
exécuté à la fois SQLPlus catqueue.sql et dbmsaq.plb
Quelqu'un a idée de ce qui peut se tromper?
ÉDITÉ:
Je peux faire tout ce qui est décrit dans: http://rwijk.blogspot.com/2009/02/whats-in-my-jms-queue.html, donc dbms_aq est en quelque sorte visible, mais pas dans ma procédure.
Juste pour clarifier: Vous avez exécuté le "desc dbms_aq" comme le même utilisateur avec lequel vous voulez compiler la procédure, non? –
Oui, cela a été fait dans la même session SQLDeveloper. –