2011-09-27 69 views
3

我必须解决使用Oracle数据库的问题。架构名称与表名 - 如何避免冲突?

在Oracle数据库有两种模式:XXX和YYY

架构XXX包含一个表名为YYY(相同的名称作为第二个模式)。

模式YYY包含一些序列(让我们说序列ZZZ)和日志表,我需要使用模式XXX中的触发器。

但是当我尝试使用这种结构来写触发器在表XXX.some_table:

SELECT YYY.ZZZ.NEXTVAL INTO AAA FROM DUAL 

甲骨文认为YYY在XXX架构和显示错误消息 表“组件ZZZ必须声明”。对于XXX用户访问YYY.ZZZ序列有适当的权限设置,但它是无用的。

如何避免这种情况?不幸的是数据库的结构已经设置好了,不能改变。

回答

6

你可以编写触发代码,所以你有一些控制数据库。那很好。

我建议你使用同义词角落找寻这个工作:

create synonym yyy_zzz_seq for yyy.zzz; 

然后,您应该能够引用同义词在触发:

SELECT yyy_zzz_seq.NEXTVAL INTO AAA FROM DUAL 
+0

没错,这正常工作。非常感谢你。 – Gil