Oracle中的PL/SQL函数无法看到DBMS_AQ

Mic*_*las 3 oracle plsql jms advanced-queuing

我有Oracle 9.2和JMS的问题.我创建了PL/SQL例程来将XML文本(从文件或CLOB)发送到队列,但是这个例程不能编译.

我的代码看起来像(填充消息省略):

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;
Run Code Online (Sandbox Code Playgroud)

甲骨文报告说:

Error(6,21): PLS-00201: identifier 'DBMS_AQ' must be declared
Run Code Online (Sandbox Code Playgroud)

我查看了一些新闻组并尝试了我发现的所有内容,但没有成功.

  1. 授予(成功)许多权利

    • 授予用户资源;
    • GRANT连接到用户;
    • GRANT对用户执行任何程序;
    • GRANT aq_administrator_role TO user;
    • GRANT aq_user_role TO user;
    • GRANT EXECUTE ON dbms_aqadm TO user;
    • GRANT EXECUTE ON dbms_aq TO user;
    • GRANT EXECUTE ON dbms_aqin TO user;
  2. desc dbms_aq显示了许多函数,如DEQUEUE,ENQUEUE,LISTEN

  3. 在SQLPlus中执行catqueue.sql和dbmsaq.plb

有谁知道什么是错的?

编辑:

我可以执行以下所有描述:http: //rwijk.blogspot.com/2009/02/whats-in-my-jms-queue.html,因此dbms_aq在某种程度上是可见的,但不在我的程序中.

cag*_*boy 6

如果你这样做会有用吗?

SYS.DBMS_AQ 
Run Code Online (Sandbox Code Playgroud)

而不仅仅是

DBMS_AQ
Run Code Online (Sandbox Code Playgroud)

如果是这样,你就错过了一个同义词.

编辑:

如果您现在获得"PLS-00201:标识符'SYS.DBMS_AQ",那么我会仔细检查您的拨款.

GRANT EXECUTE ON SYS.DBMS_AQ to <your-user>;
Run Code Online (Sandbox Code Playgroud)

另外,为了确认,您已将执行权限直接授予用户,而不是通过角色?