【问题标题】:Newly Added Column is not Appearing in Synonym新添加的列未出现在同义词中
【发布时间】:2020-03-05 00:43:48
【问题描述】:

我在XX 架构下有一个名为YY_ZZ_VAT_TRX_DETAILS 的表。 它有一个现有的 SYNONYMAA 架构。

我目前以AA 登录,我想在YY_ZZ_VAT_TRX_DETAILS 添加一列并执行以下命令就好了

alter table XX.YY_ZZ_VAT_TRX_DETAILS
add (USER_DEFINED_FISC_CLASS VARCHAR2(30));

表 XX.YY_ZZ_VAT_TRX_DETAILS 已更改。

我尝试使用下面的简单查询从表中选择列

select  USER_DEFINED_FISC_CLASS
from    YY_ZZ_VAT_TRX_DETAILS;

但我出人意料地得到了这个错误:

ORA-00904:“USER_DEFINED_FISC_CLASS”:标识符无效 00904. 00000 - “%s:无效标识符” *原因:
*操作:行错误:1 列:9

我以为我只是错过了更改表格,所以我再次重新运行 ALTER 脚本,但得到了这个错误:

从第 4 行开始的错误命令 - 更改表 XX.YY_ZZ_VAT_TRX_DETAILS 添加 (USER_DEFINED_FISC_CLASS VARCHAR2(30)) 错误报告 - ORA-01430: 正在添加的列已存在于表中 01430. 00000 - “正在添加的列已存在于表中” *原因:
*行动:

我检查了对象定义,果然,我在那里找到了新列:

但是当我从Table中查询所有列时,还是看不到:

select  *
from    YY_ZZ_VAT_TRX_DETAILS;

但是,当我使用 XX 架构前缀进行查询时,我能够看到该列:

select  *
from    XX.YY_ZZ_VAT_TRX_DETAILS;

为什么同义词没有选择新添加的列?

【问题讨论】:

  • 您是否仔细检查过您在同一数据库中使用alterselect
  • 是的,实际上是同一个会话@HoneyBadger
  • @HoneyBadger,我添加了更多信息。似乎当我使用架构查询时,该列出现了。
  • 您是否碰巧有一个名为 YY_ZZ_VAT_TRX_DETAILS 的表或视图正在查询?

标签: sql oracle


【解决方案1】:

这似乎是由 Oracle 最近为 12c 引入的“Edition-Based Redefinition”引起的。

经过进一步调查,发生的事情是:

XX.XX_ZZ_VAT_TRX_DETAILS 有一个名为XX_ZZ_VAT_TRX_DETAILS# 的可编辑视图,它只选择一定数量的列。

现在,视图 XX_ZZ_VAT_TRX_DETAILS# 在架构 AA 下有一个名为 XX_ZZ_VAT_TRX_DETAILS 的同义词,因此表上的混淆具有相同名称的同义词。

为了解决这个问题,我修改了视图XX_ZZ_VAT_TRX_DETAILS# 并添加了新列并成功重新编译。

完成后,同义词现在会显示新添加的列,并且我能够成功编译存储过程。

【讨论】:

    【解决方案2】:

    我相信您可能有一个名为 YY_ZZ_VAT_TRX_DETAILS 的表或视图或指向另一个表的私有同义词?

    在 oracle 中查询时的偏好是

    1)objects_in 相同的模式 2)私人同义词 3)公共同义词

    【讨论】:

    • 感谢您的意见,我能够解决它。请在下面查看我的答案。
    猜你喜欢
    • 1970-01-01
    • 2017-09-21
    • 2021-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多