我要使用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序列,但它没用。
如何避免这种情况?不幸的是,数据库的结构已设置且无法更改。
答案 0 :(得分:6)
您可以编写触发器代码,因此您可以对数据库进行某些控制。非常好。
我建议你使用同义词来解决这个问题:
create synonym yyy_zzz_seq for yyy.zzz;
然后,您应该能够在触发器中引用同义词:
SELECT yyy_zzz_seq.NEXTVAL INTO AAA FROM DUAL