我知道要针对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;
答案 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)
这是数据库中的一个问题 - 您触摸的表可能是间接引用自身的同义词。