Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 откуда лезет ora-00604?  [new]
andreymx
Member

Откуда: Запорожье
Сообщений: 54382
Запустил скрипт на содание представления с явной ошибкой - повторяющиеся поля
CREATE OR REPLACE FORCE VIEW SEB.V1
AS 
SELECT N.field1,
       N.field1
  FROM my_table n

почему ввалится ошибка 00604?

ORA-00604: error occurred at recursive SQL level 1
ORA-00001: unique constraint (SYS.I_COL1) violated
4 авг 10, 12:21    [9206480]     Ответить | Цитировать Сообщить модератору
 Re: откуда лезет ora-00604?  [new]
comphead
Member

Откуда: Киев
Сообщений: 3390
andreymx,

версия?
4 авг 10, 12:24    [9206508]     Ответить | Цитировать Сообщить модератору
 Re: откуда лезет ora-00604?  [new]
andreymx
Member

Откуда: Запорожье
Сообщений: 54382
Oracle9i Enterprise Edition Release 9.2.0.8.0 - Production
PL/SQL Release 9.2.0.8.0 - Production
CORE 9.2.0.8.0 Production
TNS for Solaris: Version 9.2.0.8.0 - Production
NLSRTL Version 9.2.0.8.0 - Production
4 авг 10, 12:25    [9206517]     Ответить | Цитировать Сообщить модератору
 Re: откуда лезет ora-00604?  [new]
Andrey.L
Member

Откуда: Харьков
Сообщений: 1546
andreymx,

Да не сможет Оракл создать вьюху с двумя одинаковыми полями даже с опцией FORCE.
Без пересоздания эта вьюха валидной никогда не станет.
4 авг 10, 12:33    [9206610]     Ответить | Цитировать Сообщить модератору
 Re: откуда лезет ora-00604?  [new]
andreymx
Member

Откуда: Запорожье
Сообщений: 54382
может быть из-за этого триггера?

CREATE OR REPLACE TRIGGER ************
BEFORE DDL
ON DATABASE
4 авг 10, 12:33    [9206613]     Ответить | Цитировать Сообщить модератору
 Re: откуда лезет ora-00604?  [new]
andreymx
Member

Откуда: Запорожье
Сообщений: 54382
Andrey.L
andreymx,

Да не сможет Оракл создать вьюху с двумя одинаковыми полями даже с опцией FORCE.
Без пересоздания эта вьюха валидной никогда не станет.
вопрос немного в другом - откуда именно 00604?
4 авг 10, 12:34    [9206621]     Ответить | Цитировать Сообщить модератору
 Re: откуда лезет ora-00604?  [new]
comphead
Member

Откуда: Киев
Сообщений: 3390
andreymx,

да че тут гадать. надо брать трассу и смотреть на рекурсивный sql.
4 авг 10, 12:40    [9206695]     Ответить | Цитировать Сообщить модератору
 Re: откуда лезет ora-00604?  [new]
Andrey.L
Member

Откуда: Харьков
Сообщений: 1546
andreymx,

триггер уровня схемы\базы виноват
+ 10.2.0.3
Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - 64bit Production
With the Partitioning, OLAP and Data Mining options

SQL> drop table kill_me
  2  /
drop table kill_me
           *
ERROR at line 1:
ORA-00942: table or view does not exist


SQL> create or replace trigger tr_schema_kill_me before create on schema
  2  begin
  3    IF ora_dict_obj_type = 'TABLE' AND ora_dict_obj_name = 'KILL_ME' THEN
  4      raise_application_error(-20001, 'Ошибочка');
  5    END IF;
  6  end;
  7  /

Trigger created.

SQL> create table kill_me(u number unique, ui number)
  2  /
create table kill_me(u number unique, ui number)
*
ERROR at line 1:
ORA-00604: error occurred at recursive SQL level 1
ORA-20001: Ошибочка
ORA-06512: at line 3


SQL> drop table kill_me
  2  /
drop table kill_me
           *
ERROR at line 1:
ORA-00942: table or view does not exist


SQL> drop trigger tr_schema_kill_me
  2  /

Trigger dropped.

+ 8.1.7.4
Connected to:
Oracle8i Enterprise Edition Release 8.1.7.4.0 - Production
With the Partitioning option
JServer Release 8.1.7.4.0 - Production

SQL> drop table kill_me
  2  /
drop table kill_me
           *
ERROR at line 1:
ORA-00942: table or view does not exist


SQL> create or replace trigger tr_schema_kill_me before create on schema
  2  begin
  3    IF ora_dict_obj_type = 'TABLE' AND ora_dict_obj_name = 'KILL_ME' THEN
  4      raise_application_error(-20001, 'Ошибочка');
  5    END IF;
  6  end;
  7  /

Trigger created.

SQL> create table kill_me(u number unique, ui number)
  2  /
create table kill_me(u number unique, ui number)
*
ERROR at line 1:
ORA-00604: error occurred at recursive SQL level 1
ORA-20001: Ошибочка
ORA-06512: at line 3


SQL> drop table kill_me
  2  /
drop table kill_me
           *
ERROR at line 1:
ORA-00942: table or view does not exist


SQL> drop trigger tr_schema_kill_me
  2  /

Trigger dropped.
4 авг 10, 13:30    [9207447]     Ответить | Цитировать Сообщить модератору
 Re: откуда лезет ora-00604?  [new]
Вячеслав Любомудров
Member

Откуда: Владивосток
Сообщений: 18484
Причем тут триггера?
При создании объекта надо вставить определенные метаданные о нем в словарь. Это и выполняется в рекурсивной транзакции. И валится при попытке вставить в таблицу, описывающую столбцы, уникальные имена (create unique index i_col1 on col$(obj#, name))
5 авг 10, 03:16    [9212370]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить