架构名称与表名称 - 如何避免冲突?

时间:2011-09-27 06:14:25

标签: database oracle namespaces schema

我要使用Oracle数据库来解决问题。

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

模式XXX包含一个名为YYY的表(与第二个模式同名)。

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

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

SELECT YYY.ZZZ.NEXTVAL INTO AAA FROM DUAL

Oracle将YYY视为XXX架构中的表并显示错误消息 “组件ZZZ必须声明为”。为XXX用户设置了适当的权限来访问YYY.ZZZ序列,但它没用。

如何避免这种情况?不幸的是,数据库的结构已设置且无法更改。

1 个答案:

答案 0 :(得分:6)

您可以编写触发器代码,因此您可以对数据库进行某些控制。非常好。

我建议你使用同义词来解决这个问题:

create synonym yyy_zzz_seq for yyy.zzz;

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

SELECT yyy_zzz_seq.NEXTVAL INTO AAA FROM DUAL