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

Gil*_*Gil 3 database oracle schema namespaces

我将使用Oracle数据库解决问题.

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

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

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

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

SELECT YYY.ZZZ.NEXTVAL INTO AAA FROM DUAL
Run Code Online (Sandbox Code Playgroud)

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

怎么避免这个?不幸的是,数据库的结构已设置且无法更改.

APC*_*APC 6

您可以编写触发器代码,以便对数据库进行一些控制.非常好.

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

create synonym yyy_zzz_seq for yyy.zzz;
Run Code Online (Sandbox Code Playgroud)

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

SELECT yyy_zzz_seq.NEXTVAL INTO AAA FROM DUAL
Run Code Online (Sandbox Code Playgroud)