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

Откуда: Калуга
Сообщений: 615
Подскажите, как это ORA-00001 может возникнуть на таблице при удалении. Срабатывает ограничение (unique key) на этой же таблице. Триггеров на delete нету вообще.
7 ноя 07, 12:50    [4884450]     Ответить | Цитировать Сообщить модератору
 Re: ORA-00001  [new]
KoTTT
Member

Откуда: Екб
Сообщений: 1511
А примерчик?
7 ноя 07, 12:56    [4884476]     Ответить | Цитировать Сообщить модератору
 Re: ORA-00001  [new]
xymbo
Member

Откуда: Донской --> Москва
Сообщений: 2560
А можно примерчик сюда запостить?
7 ноя 07, 12:56    [4884479]     Ответить | Цитировать Сообщить модератору
 Re: ORA-00001  [new]
lft
Member

Откуда: Калуга
Сообщений: 615
DELETE AR.ADDRESS WHERE N IN 
(
SELECT  A.N          
FROM AR.ADDRESS A WHERE A.IS_ACTUAL = 'N' AND (SELECT B.GEONIM_LEVEL_N FROM AR.GEONIM_TYPE B WHERE A.GEONIM_TYPE_N  = B.N) = 6
CONNECT BY PRIOR A.N = A.ANCESTOR_N START WITH A.N = 1716);

--ORA-00001: нарушено ограничение уникальности (AR.ADDRESS_ID001)

CONN / AS SYSDBA

SELECT TRIGGER_NAME, TRIGGERING_EVENT FROM DBA_TRIGGERS WHERE TABLE_NAME='ADDRESS' AND TABLE_OWNER='AR';

TRIGGER_NAME TRIGGERING_EVENT

ADDRESS_BI INSERT
ADDRESS_BIU_001 INSERT OR UPDATE

SELECT TABLE_NAME, CONSTRAINT_NAME, CONSTRAINT_TYPE FROM DBA_CONSTRAINTS WHERE INDEX_NAME= 'ADDRESS_ID001';
TABLE_NAME CONSTRAINT_NAME CONSTRAINT_TYPE
ADDRESS ADDRESS_ID001 U

В дополнение: Таблица иерархическая.
7 ноя 07, 13:08    [4884540]     Ответить | Цитировать Сообщить модератору
 Re: ORA-00001  [new]
lft
Member

Откуда: Калуга
Сообщений: 615
Прошу прощения просто запониковал.
7 ноя 07, 13:14    [4884580]     Ответить | Цитировать Сообщить модератору
 Re: ORA-00001  [new]
Fus
Member

Откуда: Питер
Сообщений: 105
lft
[src oracle]
DELETE AR.ADDRESS WHERE N IN
(
SELECT A.N
FROM AR.ADDRESS A WHERE A.IS_ACTUAL = 'N' AND (SELECT B.GEONIM_LEVEL_N FROM AR.GEONIM_TYPE B WHERE A.GEONIM_TYPE_N = B.N) = 6
CONNECT BY PRIOR A.N = A.ANCESTOR_N START WITH A.N = 1716);

--ORA-00001: нарушено ограничение уникальности (AR.ADDRESS_ID001)


Может через курсор попробовать?
7 ноя 07, 13:14    [4884582]     Ответить | Цитировать Сообщить модератору
 Re: ORA-00001  [new]
xymbo
Member

Откуда: Донской --> Москва
Сообщений: 2560
Смотрели план при DELETE?
Покажите результат запроса и DESC таблиц ADDRESS и GEONIM_TYPE
SELECT  A.N          
FROM AR.ADDRESS A WHERE A.IS_ACTUAL = 'N' AND (SELECT B.GEONIM_LEVEL_N FROM AR.GEONIM_TYPE B WHERE A.GEONIM_TYPE_N  = B.N) = 6
CONNECT BY PRIOR A.N = A.ANCESTOR_N START WITH A.N = 1716
7 ноя 07, 13:15    [4884594]     Ответить | Цитировать Сообщить модератору
 Re: ORA-00001  [new]
lft
Member

Откуда: Калуга
Сообщений: 615
На самом деле были дочерние объекты и "ON DELETE SET NULL"
PARSING IN CURSOR #4 len=70 dep=1 uid=0 oct=6 lid=0 tim=1166435350112068 hv=168936334 ad='84780c2c'
 update "AR"."ADDRESS" set "ANCESTOR_N" = null where "ANCESTOR_N" = :1
END OF STMT
PARSE #4:c=0,e=65,p=0,cr=0,cu=0,mis=0,r=0,dep=1,og=4,tim=1166435350112053
BINDS #4:
kkscoacd
 Bind#0
  oacdty=02 mxl=22(22) mxlc=00 mal=00 scl=00 pre=00
  oacflg=12 fl2=0001 frm=00 csi=00 siz=24 off=0
  kxsbbbfp=b7116f1c  bln=22  avl=04  flg=09
  value=352587

Ну и соответственно ORA-00001
7 ноя 07, 13:15    [4884596]     Ответить | Цитировать Сообщить модератору
 Re: ORA-00001  [new]
xymbo
Member

Откуда: Донской --> Москва
Сообщений: 2560
lft
Прошу прощения просто запониковал.

В смысле DELETE проходит?:)
7 ноя 07, 13:16    [4884603]     Ответить | Цитировать Сообщить модератору
 Re: ORA-00001  [new]
lft
Member

Откуда: Калуга
Сообщений: 615
Всем спасибо за оперативность, впредь буду повнимательнее :)
7 ноя 07, 13:16    [4884607]     Ответить | Цитировать Сообщить модератору
 Re: ORA-00001  [new]
Fus
Member

Откуда: Питер
Сообщений: 105
lft
[src oracle]
DELETE AR.ADDRESS WHERE N IN
(
SELECT A.N
FROM AR.ADDRESS A WHERE A.IS_ACTUAL = 'N' AND (SELECT B.GEONIM_LEVEL_N FROM AR.GEONIM_TYPE B WHERE A.GEONIM_TYPE_N = B.N) = 6
CONNECT BY PRIOR A.N = A.ANCESTOR_N START WITH A.N = 1716);

--ORA-00001: нарушено ограничение уникальности (AR.ADDRESS_ID001)


Может через курсор попробовать?
7 ноя 07, 13:19    [4884627]     Ответить | Цитировать Сообщить модератору
 Re: ORA-00001  [new]
lft
Member

Откуда: Калуга
Сообщений: 615
ALTER TABLE ADDRESS DROP CONSTRAINT R_9;

ALTER TABLE ADDRESS ADD (
CONSTRAINT R_9
FOREIGN KEY (ANCESTOR_N)
REFERENCES ADDRESS (N)
ON DELETE CASCADE);

DELETE AR.ADDRESS WHERE N IN
(
SELECT A.N
FROM AR.ADDRESS A WHERE A.IS_ACTUAL = 'N' AND (SELECT B.GEONIM_LEVEL_N FROM AR.GEONIM_TYPE B WHERE A.GEONIM_TYPE_N = B.N) = 6
CONNECT BY PRIOR A.N = A.ANCESTOR_N START WITH A.N = 1716)

Все ок.
7 ноя 07, 13:25    [4884668]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить