Ошибка синонима Oracle - PullRequest
3 голосов
/ 15 июля 2011

Я знаком с программированием на базе данных Oracle и получаю эту ошибку:

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 ]

3 голосов
/ 15 июля 2011

У вас есть проблема в вашей базе данных.

Ошибка 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
0 голосов
/ 15 июля 2011

Это проблема в БД - вероятно, таблица, к которой вы прикасаетесь, является синонимом, который косвенно ссылается на себя.

0 голосов
/ 15 июля 2011

Вероятно, это проблема кода - возможно, это связано с тем, что у вас есть в строке 2 вашего скрипта.

Хотите опубликовать это?

Из этого поста Как отлаживать ORA-01775: циклическая цепочка синонимов?

http://ora -01775.ora-code.com / предлагает:

ORA-01775: циклическая цепочка синонимов Причина. С помощью ряда операторов синонимов CREATE был определен синоним, который ссылался на себя. Например, следующие определения являются круглыми:

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

Действие: измените одно определение синонима, чтобы оно применялось к базовой таблице или представлению, и повторите операцию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...