我在使用 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
我查看了一些新闻组并尝试了我找到的所有内容,但没有成功。
授予(成功)许多权限
desc dbms_aq 显示了许多函数,如 DEQUEUE、ENQUEUE、LISTEN
在 SQLPlus 中执行 catqueue.sql 和 dbmsaq.plb
有人知道可能出了什么问题吗?
已编辑:
我可以执行以下内容中描述的所有操作:http://rwijk.blogspot.com/2009/02/whats-in-my-jms-queue.html,因此 dbms_aq 在某种程度上可见,但不在我的程序中。
如果你这样做的话,它会起作用吗...
SYS.DBMS_AQ
而不仅仅是
DBMS_AQ
如果是这样,您就缺少同义词。
编辑:
如果您现在收到“PLS-00201:标识符'SYS.DBMS_AQ”,那么我会仔细检查您的补助金。
GRANT EXECUTE ON SYS.DBMS_AQ to <your-user>;
另外,为了确认一下,您已直接授予用户执行权限,而不是通过角色?
确保您授予 SYS 用户而不是 SYSTEM
为了在存储过程中使用对象,您必须具有WITH GRANT OPTION 授权。
在这种情况下你必须有 在 SYS.DBMS_AQ 上授予执行权限使用授予选项到;