2011-07-15 17 views
3

は、私は、Oracle DBに対するプログラミングに知っていると私はこのエラーを取得しています:Oracleのシノニムエラー

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

が、これは私のコード内または私のDBで何か間違ってますか?コードはデータアクセスレイヤー全体でほぼ同じですが、特定のテーブルに挿入しようとするとこのエラーが発生します。

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

のようなクエリである(とBとB地点へのポイントではなく、より複雑サイクルどこあなただけの1レベルのループを持っていると仮定して)これらの同義語ループを識別するためのクエリを実行することができますおそらくSQLのエラーです。おそらく、あなたの投稿を編集してSQL文を含めることができます。 – jp2code

答えて

3

データベースに問題があります。

ORA-01775エラーはあなたが別の同義語B.シノニムBを参照する1つのシノニム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.何かを同義語これを修正する唯一の方法は、修正することですこれらの種類の循環依存性を持たないように、データベース内の同義語を使用します。あなたは、これが最もこの

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 
+0

私はそのクエリを実行しても何の結果も得られませんが、これはさらに大きな問題があることを意味しますか? – esastincy

+0

@esastincy - シノニムAはシノニムBを指し、BはCを指し、CはAを指します。それはおそらく手動で依存関係ツリーを歩くだけです。シノニムが 'ALL_SYNONYMS'で参照を使用しているかどうかを確認し、そのシノニムが参照するものを参照してください。 –

+0

それ自身を参照するシノニムを作成すると、このエラーが発生することもあります。これは、特定のスキーマの表/ビューのPUBLICシノニムを作成してから、表/ビューの削除/名前変更を行うと簡単に発生します。 – DCookie

0

これはおそらく、コードの問題である - おそらくあなたはスクリプトのLINE2に持っているものとは何か。

投稿してください。このポスト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 

処置:それはベーステーブルまたはビューに適用されるように1つの同義語の定義を変更し、操作を再試行してください。

+1

問題はスクリプトに関連しているとは考えにくいです。 2行目の9列目は疑いもなく、同義語への参照がどこにあるかです。問題は同義語の基本的な定義です。 –

0

これはDBの問題です。おそらく触っているテーブルは間接的に参照する同義語です。