从关于 DBMS_AQ 的入队方法的 Oracle 文档中,指定“对象的名称由可选的模式名称和名称指定。如果未指定模式名称,则假定当前模式。” [1]
有问题的系统定义了模式中的所有对象,我们称之为 DEV。然后像 DEV_AD 一样定义用户,并且在登录期间,有一个触发器将其当前模式更改为 DEV。这意味着当他们从某个表中选择 * 时,他们从 DEV.sometable 中选择 *,而不是 DEV_AD.sometable。这没有任何问题。
但是,当用户尝试在 SOMEQUEUE 上排队消息时,它不起作用 - 系统尝试在不存在的 DEV_AD.SOMEQUEUE 上排队,而不是在 DEV.SOMEQUEUE 上排队。通过将 DEV.SOMEQUEUE 而不仅仅是 SOMEQUEUE 作为 DBMS_AQ.ENQUEUE 的参数,消息成功排队。
这是一个 Oracle 错误(或文档错误),是否有解决方法?
如果这是一个错误,我们在接下来的几个月里仍然使用 10.2.0.4.0。是固定在11g吗?
[1] http://docs.oracle.com/cd/B19306_01/appdev.102/b14258/d_aq.htm#ARPLS081