【问题标题】:Schema name vs. table name - how to avoid conflicts?架构名称与表名称 - 如何避免冲突?
【发布时间】:2011-11-25 18:25:41
【问题描述】:

我要解决一个使用 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序列,但是没用。

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

【问题讨论】:

    标签: database oracle namespaces schema


    【解决方案1】:

    您可以编写触发器代码,因此您对数据库有一些控制权。那挺好的。

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

    create synonym yyy_zzz_seq for yyy.zzz;
    

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

    SELECT yyy_zzz_seq.NEXTVAL INTO AAA FROM DUAL
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-21
      • 1970-01-01
      • 2011-02-03
      • 2017-01-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多