Oracle同义词错误

时间:2011-07-15 16:44:16

标签: c# sql oracle

我知道要针对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;

3 个答案:

答案 0 :(得分:3)

您的数据库存在问题。

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

答案 1 :(得分:0)

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

小心贴吧?

来自这篇文章How to debug ORA-01775: looping chain of synonyms?

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

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

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

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

答案 2 :(得分:0)

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