【问题标题】:Double quotes in oracle synonymoracle同义词中的双引号
【发布时间】:2016-03-15 10:24:16
【问题描述】:

我有一张桌子SC.LT_TABLE。 由于一些糟糕的编码,我的程序执行了这个错误的请求

SELECT * FROM SC.LT_TABLESC.LT_TABLE

当然它不起作用。目标是使此查询有效。

我尝试创建一个类似的同义词

CREATE PUBLIC SYNONYM "SC.LT_TABLESC.LT_TABLE" FROM SC.LT_TABLE

并且查询有效,但前提是我使用双引号,我的代码没有使用它。

所以问题是 - 我可以以某种方式将双引号包含在同义词中吗?还是有其他方法可以使该查询起作用?

我知道整个问题很荒谬,但我现在无法更新代码 :-)

甲骨文 11g。

谢谢。

【问题讨论】:

  • 如果你接受我的建议,你基本上是在已经存在的便便上倾倒更多便便。为什么不首先清理原来的便便?
  • 我已经清理了原始的便便,但不幸的是,我现在无法将受便便污染的代码与无便便的代码交换。所以我只是想多加一点便便来解决可能由原始便便引起的便便雪崩。
  • 您几乎不得不修复代码。另外,如果我是你,我会确保你的测试实践得到改进,这样以后就可以避免这种事情了。
  • @JiriTousek - 仅当它是大写字母并且仅包含允许的字符时。在这种情况下,同义词(不是表)是带引号的标识符,并且必须始终用双引号引用。问题在于同义词中的句号,而不是其余部分的情况。
  • @JiriTousek 这里的问题不是这种情况,而是表名本身具有使用quoted-identifier创建的句点。

标签: sql oracle oracle11g synonym


【解决方案1】:

没有办法做你正在尝试的事情。 SELECT * FROM SC.LT_TABLESC.LT_TABLE 中的标识符SC.LT_TABLESC.LT_TABLE 包含三个段,将以这种方式解析。

很可能定义一个名为"SC.LT_TABLESC.LT_TABLE" 的同义词,但由于该同义词包含.,因此只能使用带引号的标识符语法来引用它。

这里的重点是标识符SC.LT_TABLESC.LT_TABLE先被解析成三个段,然后每个段都被解析,没有办法让两个段LT_TABLESC.LT_TABLE看起来像一个段,因为决定是在考虑任何现有对象之前制作。

【讨论】:

    猜你喜欢
    • 2010-09-14
    • 2021-09-17
    • 2011-01-03
    • 2020-11-26
    • 2013-07-02
    • 2020-04-09
    • 1970-01-01
    • 2013-06-17
    • 1970-01-01
    相关资源
    最近更新 更多