【问题标题】:PL/SQL function in Oracle cannot see DBMS_AQOracle 中的 PL/SQL 函数看不到 DBMS_AQ
【发布时间】:2010-11-25 14:38:05
【问题描述】:

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

甲骨文报告说:

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

我查看了一些新闻组并尝试了所有我找到的方法,但没有成功。

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

    • 向用户授予资源;
    • 向用户授予连接;
    • 向用户授予执行任何程序;
    • 将 aq_administrator_role 授予用户;
    • 将 aq_user_role 授予用户;
    • 在 dbms_aqadm 上向用户授予执行权限;
    • 将 dbms_aq 上的执行权限授予用户;
    • 在 dbms_aqin 上授予用户执行权限;
  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 以某种方式可见,但在我的过程中不可见。

【问题讨论】:

  • 澄清一下:您执行“desc dbms_aq”的用户与您要编译该过程的用户相同,对吧?
  • 是的,它是在同一个 SQLDeveloper 会话中完成的。

标签: oracle plsql jms advanced-queuing


【解决方案1】:

如果你这样做,它是否有效......

SYS.DBMS_AQ 

而不仅仅是

DBMS_AQ

如果是这样,你错过了同义词。

编辑

如果您现在收到“PLS-00201:标识符 'SYS.DBMS_AQ”,那么我会仔细检查您的授权。

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

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

【讨论】:

  • 没有。在 SQL Developer 中,我添加了 sys.然后代码完成建议dbms_aq,但之后我可以在AQ$_DEQUEUE()、...、UNREGISTER(...)之间进行选择,但是没有enqueue_options_t也没有message_properties_t。
  • 添加 sys. Oracle 将错误消息更改为:Error(6,21): PLS-00201: identifier 'SYS.DBMS_AQ' must be declared
  • 它在我从 sys 用户而不是用户作为 sysdba 授予后才起作用。谢谢!
【解决方案2】:

为了在存储过程中使用对象,您必须拥有 WITH GRANT OPTION 的授权。

在这种情况下,您必须 在 SYS.DBMS_AQ 上授予执行 WITH GRANT OPTION 到 ;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-03
    • 1970-01-01
    • 2020-06-02
    • 2020-05-20
    相关资源
    最近更新 更多