我对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以某种方式可见,但在我的过程中不可见。
3条答案
按热度按时间nvbavucw1#
我也犯了同样的错误。如果确定DBMS_AQ存在,请确保给予授权的用户是DBMS用户而不是SYSTEM用户。因为SQL拥有数据字典,所以它被认为比SYSTEM更特殊一些。
f87krz0w2#
为了在存储过程中使用对象,必须具有WITHGRANTOPTION赠款。
在这种情况下,您必须让GRANT EXECUTE ON DBMS_AQWITH GRANT OPTION;
lp0sw83n3#
如果你这样做的话...
而不是仅仅
如果是这样的话,你就少了一个同义词。
编辑:
如果您现在收到“PLS-00201:标识符'DBM.DBMS_AQ',那么我会仔细检查你的赠款。
另外,确认一下,您已经将执行权限 * 直接 * 授予了用户,而不是通过角色?