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

ijxebb2r  于 2023-10-16  发布在  Oracle
关注(0)|答案(3)|浏览(175)

我对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;

Oracle报告说:

Error(6,21): PLS-00201: identifier 'DBMS_AQ' must be declared

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

  • (成功地)获得许多许可
  • 向用户授予资源;
  • 授予用户许可;
  • 授权用户执行任何程序;
  • GRANT aq_administrator_role TO user;
  • GRANT aq_user_role TO user;
  • 授权执行dbms_aqadm到用户;
  • GRANT EXECUTE ON dbms_aq TO user;
  • 向用户授予dbms_aqin上的执行权限;
  • desc dbms_aq显示了许多函数,如DEQUEUE,ENQUEUE,LISTEN
  • 在SQLPlus中执行category.sql和dbmsaq.plb

有谁知道会出什么问题吗?

已编辑

我可以做的一切是描述:http://rwijk.blogspot.com/2009/02/whats-in-my-jms-queue.html,所以dbms_aq以某种方式可见,但在我的过程中不可见。

nvbavucw

nvbavucw1#

我也犯了同样的错误。如果确定DBMS_AQ存在,请确保给予授权的用户是DBMS用户而不是SYSTEM用户。因为SQL拥有数据字典,所以它被认为比SYSTEM更特殊一些。

f87krz0w

f87krz0w2#

为了在存储过程中使用对象,必须具有WITHGRANTOPTION赠款。
在这种情况下,您必须让GRANT EXECUTE ON DBMS_AQWITH GRANT OPTION;

lp0sw83n

lp0sw83n3#

如果你这样做的话...

SYS.DBMS_AQ

而不是仅仅

DBMS_AQ

如果是这样的话,你就少了一个同义词。

编辑

如果您现在收到“PLS-00201:标识符'DBM.DBMS_AQ',那么我会仔细检查你的赠款。

GRANT EXECUTE ON SYS.DBMS_AQ to <your-user>;

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

相关问题