【问题标题】:Oracle Synonym ErrorOracle 同义词错误
【发布时间】:2011-10-06 07:50:07
【问题描述】:

我知道要针对 Oracle DB 进行编程,但我收到了这个错误:

ORA-06550: line 2, column 9: PL/SQL: ORA-01775: looping chain of synonyms 

这是我的代码或数据库中的问题吗?几乎整个数据访问层的代码都是相同的,当我尝试插入一个特定的表时,我只会收到此错误。

BEGIN
UPDATE DEAL_NOTE 
SET NOTE_TXT=:prmNOTE_TXT 
WHERE DEAL_ID=:prmDEAL_ID;

IF SQL%NOTFOUND THEN
INSERT INTO DEAL_NOTE (NOTE_TXT, DEAL_ID) values (:prmNOTE_TXT, :prmDEAL_ID);
END IF;

END;

【问题讨论】:

  • 这很可能是您的 SQL 中的错误。也许您可以编辑您的帖子以包含您的 SQL 语句。

标签: c# sql oracle


【解决方案1】:

您的数据库有问题。

ORA-01775 错误表明您有一个同义词 A 引用另一个同义词 B。同义词 B 反过来又引用同义词 A。类似

SQL> create synonym foo2 for foo1;

Synonym created.

SQL> create synonym foo1 for foo2;

Synonym created.

SQL> select * from foo2;
select * from foo2
              *
ERROR at line 1:
ORA-01775: looping chain of synonyms

解决此问题的唯一方法是修复数据库中的同义词,这样您就不会出现这些循环依赖。您可以使用这样的查询运行查询来识别这些同义词循环(假设您只有一个一级循环,其中 A 指向 B,B 指向 A,而不是更多涉及的循环)

SQL> ed
Wrote file afiedt.buf

  1  select a.synonym_name, b.synonym_name
  2    from all_synonyms a,
  3         all_synonyms b
  4   where a.owner = b.table_owner
  5     and a.synonym_name = b.table_name
  6     and b.owner = a.table_owner
  7*    and b.synonym_name = a.table_name
SQL> /

SYNONYM_NAME                   SYNONYM_NAME
------------------------------ ------------------------------
FOO2                           FOO1
FOO1                           FOO2

【讨论】:

  • 当我运行该查询时,我没有得到任何结果,这是否意味着我遇到了更大的问题?
  • @esastincy - 这可能意味着您有不止一个级别的循环 - 同义词 A 指向同义词 B,B 指向 C,C 指向 A。手动操作可能更容易遍历依赖关系树——查看ALL_SYNONYMS 中引用的同义词,查看同义词引用的内容等,直到找到循环。
  • 如果您创建一个引用自身的同义词,您也可能会收到此错误。当您为特定模式的表/视图创建 PUBLIC 同义词,然后删除/重命名表/视图时,这很容易发生。
  • @DCookie - 如何通过删除同义词引用的表来获得 ORA-01775?在这种情况下,我只能得到 ORA-00942: table or view does not exist 错误。
  • @Justin:创建一个表 me.x。为 me.x 创建一个公共同义词 x。删除 TABLE me.x。从 x 中选择 *;导致错误。你真的不需要创建/删除表步骤,它只是说明了我通常看到它是如何发生的。只需为 me.x 创建一个公共同义词 x。从 x 中选择 *。同样的错误。
【解决方案2】:

这是数据库中的一个问题——可能您正在触摸的表是间接引用自身的同义词。

【讨论】:

    【解决方案3】:

    这可能是一个代码问题 - 可能与脚本第 2 行的内容有关。

    愿意发布吗?

    来自这个帖子How to debug ORA-01775: looping chain of synonyms?

    http://ora-01775.ora-code.com/ 建议:

    ORA-01775: 同义词循环链 原因:通过一系列 CREATE synonym 语句,定义了一个引用自身的同义词。例如,以下定义是循环的:

    CREATE SYNONYM s1 for s2 CREATE SYNONYM s2 for s3 CREATE SYNONYM s3 for s1
    

    操作:更改一个同义词定义,使其适用于基表或视图,然后重试该操作。

    【讨论】:

    • 问题不太可能与脚本有关。第 2 行第 9 列无疑是引用同义词的地方。问题在于同义词的基本定义。
    猜你喜欢
    • 2021-09-17
    • 2011-05-01
    • 2010-09-21
    • 2011-10-04
    • 1970-01-01
    • 1970-01-01
    • 2015-01-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多