Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database 模式名与表名-如何避免冲突?_Database_Oracle_Namespaces_Schema - Fatal编程技术网

Database 模式名与表名-如何避免冲突?

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

我必须使用Oracle数据库解决一个问题

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

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

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

但是,当我尝试在表XXX上写入触发器时,一些使用这种结构的表:

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