Database 模式名与表名-如何避免冲突?
我必须使用Oracle数据库解决一个问题 在Oracle数据库中有两种模式:XXX和YYY 模式XXX包含一个名为YYY的表(与第二个模式同名) 模式YYY包含一些序列(比如序列ZZZ)和日志表,我需要由模式XXX中的触发器使用它们 但是,当我尝试在表XXX上写入触发器时,一些使用这种结构的表:Database 模式名与表名-如何避免冲突?,database,oracle,namespaces,schema,Database,Oracle,Namespaces,Schema,我必须使用Oracle数据库解决一个问题 在Oracle数据库中有两种模式:XXX和YYY 模式XXX包含一个名为YYY的表(与第二个模式同名) 模式YYY包含一些序列(比如序列ZZZ)和日志表,我需要由模式XXX中的触发器使用它们 但是,当我尝试在表XXX上写入触发器时,一些使用这种结构的表: SELECT YYY.ZZZ.NEXTVAL INTO AAA FROM DUAL Oracle将YYY视为XXX架构中的表,并显示错误消息 “必须声明组件ZZZ”。为XXX用户设置了访问YYY.ZZ
SELECT YYY.ZZZ.NEXTVAL INTO AAA FROM DUAL
Oracle将YYY视为XXX架构中的表,并显示错误消息
“必须声明组件ZZZ”。为XXX用户设置了访问YYY.ZZZ序列的适当权限,但这是无用的
如何避免这种情况?不幸的是,数据库的结构已设置,无法更改。您可以编写触发器代码,因此您可以对数据库进行一些控制。那很好 我建议您使用同义词来处理以下问题:
create synonym yyy_zzz_seq for yyy.zzz;
然后,您应该能够引用触发器中的同义词:
SELECT yyy_zzz_seq.NEXTVAL INTO AAA FROM DUAL