Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2014.08.03;
Скачать: CL | DM;

Вниз

Считаю, что странное нарушение целостности какое-то..   Найти похожие ветки 

 
OW ©   (2011-03-14 11:17) [0]

Запрос

UPDATE SUBJECT_PHONE
SET
 ID_SUBJECT = :ID_SUBJECT,
 PHONE = :PHONE,
 PHONE_NAME = :PHONE_NAME,
 DATE_BEGIN = :DATE_BEGIN
WHERE
 ID_SUBJECT = :OLD_ID_SUBJECT

:ID_SUBJECT(FLOAT,IN)=1624664
:PHONE(VARCHAR[10],IN)="8342474312"
:PHONE_NAME(VARCHAR[2],IN)="56"
:DATE_BEGIN(IN)=<NULL>
:OLD_ID_SUBJECT(FLOAT,IN)=1624664

Дает ошибку
Error: ORA-00001: unique constraint (ISS.UK_SP_PH_SUB_BEGIN) violated

Таблица

CREATE TABLE "ISS"."SUBJECT_PHONE"
  ( "ID_SUBJECT" NUMBER,
"PHONE" VARCHAR2(11),
"PHONE_NAME" VARCHAR2(1000),
"DATE_BEGIN" DATE,
"DATE_END" DATE,

 ALTER TABLE "ISS"."SUBJECT_PHONE" ADD CONSTRAINT "UK_SP_PH_SUB_BEGIN" UNIQUE ("ID_SUBJECT", "PHONE", "DATE_BEGIN")


Проверяю:

select
*
from SUBJECT_PHONE SP
where
SP.PHONE = "8342474312"
and
SP.ID_SUBJECT = 1624664

1 запись выбрана.

Я её же и апдейчу,
почему не дает?


 
OW ©   (2011-03-14 11:22) [1]


> SP.PHONE = "8342474312"
> and
> SP.ID_SUBJECT = 1624664
>
> 1 запись выбрана.
>
> Я её же и апдейчу,

т.е. ни SP.PHONE, ни SP.ID_SUBJECT не меняется.
А уже только они определяют в таблице только одну запись


 
Sergey13 ©   (2011-03-14 11:24) [2]

> :DATE_BEGIN(IN)=<NULL>
А если не нулл попробовать?


 
OW ©   (2011-03-14 11:37) [3]

UPDATE SUBJECT_PHONE
SET
-- ID_SUBJECT = 1624664, -- и так тоже
PHONE = "8342474312",
PHONE_NAME = "Некий",
DATE_BEGIN = to_date("01.03.2011")
WHERE
ID_SUBJECT = 1624664

тоже самое..Error: ORA-00001: unique constraint (ISS.UK_SP_PH_SUB_BEGIN) violated


 
OW ©   (2011-03-14 11:41) [4]

полное определение таблицы такое

CREATE TABLE "ISS"."SUBJECT_PHONE"
  ( "ID_SUBJECT" NUMBER,
"PHONE" VARCHAR2(11),
"PHONE_NAME" VARCHAR2(1000),
"DATE_BEGIN" DATE,
"DATE_END" DATE,
"ORDER_SORT" NUMBER,
"ALTERNATE_ADDRESS" VARCHAR2(1000),
"UPDATE_STATUS" NUMBER,
"IN_09" VARCHAR2(1) DEFAULT "Y" NOT NULL ENABLE,
"IS_FREE" VARCHAR2(1) DEFAULT "N" NOT NULL ENABLE,
"IS_PARALLEL" VARCHAR2(1) DEFAULT "N" NOT NULL ENABLE,
"PAID_INFORM" VARCHAR2(1) DEFAULT "Y" NOT NULL ENABLE,
"PCOMMENT" VARCHAR2(200),
"ADDRESS" VARCHAR2(500),
 CONSTRAINT "UK_SP_PH_SUB_BEGIN" UNIQUE ("ID_SUBJECT", "PHONE", "DATE_BEGIN")
 USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255 NOLOGGING COMPUTE STATISTICS
 STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
 PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
 TABLESPACE "SPRAVKA"  ENABLE,
 SUPPLEMENTAL LOG DATA (PRIMARY KEY) COLUMNS,
 SUPPLEMENTAL LOG DATA (FOREIGN KEY) COLUMNS,
 SUPPLEMENTAL LOG DATA (UNIQUE INDEX) COLUMNS,
 CONSTRAINT "FK_SP_ID_SUBJECT" FOREIGN KEY ("ID_SUBJECT")
  REFERENCES "ISS"."SUBJECT" ("ID_SUBJECT") ENABLE
  ) PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS NOLOGGING
 STORAGE(INITIAL 65536 NEXT 8192 MINEXTENTS 1 MAXEXTENTS 2147483645
 PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
 TABLESPACE "SPRAVKA" ;

 CREATE INDEX "ISS"."IX_SP_ID_SUBJECT" ON "ISS"."SUBJECT_PHONE" ("ID_SUBJECT")
 PCTFREE 10 INITRANS 2 MAXTRANS 255 NOLOGGING COMPUTE STATISTICS
 STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
 PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
 TABLESPACE "SPRAVKA" ;

 CREATE INDEX "ISS"."IX_SP_PHONE" ON "ISS"."SUBJECT_PHONE" ("PHONE")
 PCTFREE 10 INITRANS 2 MAXTRANS 255 NOLOGGING COMPUTE STATISTICS
 STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
 PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
 TABLESPACE "SPRAVKA" ;

 CREATE UNIQUE INDEX "ISS"."UK_SP_PH_SUB_BEGIN" ON "ISS"."SUBJECT_PHONE" ("ID_SUBJECT", "PHONE", "DATE_BEGIN")
 PCTFREE 10 INITRANS 2 MAXTRANS 255 NOLOGGING COMPUTE STATISTICS
 STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
 PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
 TABLESPACE "SPRAVKA" ;

 ALTER TABLE "ISS"."SUBJECT_PHONE" ADD SUPPLEMENTAL LOG DATA (PRIMARY KEY) COLUMNS;

 ALTER TABLE "ISS"."SUBJECT_PHONE" ADD SUPPLEMENTAL LOG DATA (FOREIGN KEY) COLUMNS;

 ALTER TABLE "ISS"."SUBJECT_PHONE" ADD SUPPLEMENTAL LOG DATA (UNIQUE INDEX) COLUMNS;

 ALTER TABLE "ISS"."SUBJECT_PHONE" MODIFY ("IN_09" NOT NULL ENABLE);

 ALTER TABLE "ISS"."SUBJECT_PHONE" MODIFY ("IS_FREE" NOT NULL ENABLE);

 ALTER TABLE "ISS"."SUBJECT_PHONE" MODIFY ("IS_PARALLEL" NOT NULL ENABLE);

 ALTER TABLE "ISS"."SUBJECT_PHONE" MODIFY ("PAID_INFORM" NOT NULL ENABLE);

 ALTER TABLE "ISS"."SUBJECT_PHONE" ADD CONSTRAINT "UK_SP_PH_SUB_BEGIN" UNIQUE ("ID_SUBJECT", "PHONE", "DATE_BEGIN")
 USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255 NOLOGGING COMPUTE STATISTICS
 STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
 PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
 TABLESPACE "SPRAVKA"  ENABLE;


 
Вариант   (2011-03-14 11:43) [5]


> OW ©   (14.03.11 11:37) [3]


select count(*) as CNT  from SUBJECT_PHONE
WHERE
ID_SUBJECT = 1624664 - сколько показывает?


 
OW ©   (2011-03-14 11:48) [6]


> select count(*) as CNT  from SUBJECT_PHONE
> WHERE
> ID_SUBJECT = 1624664 - сколько показывает?


6

да-да, тут, кажется, сейчас..


 
OW ©   (2011-03-14 11:51) [7]

ну да, логично. Все правильно
UPDATE SUBJECT_PHONE
SET
ID_SUBJECT = :ID_SUBJECT,
PHONE = :PHONE,
PHONE_NAME = :PHONE_NAME,
DATE_BEGIN = :DATE_BEGIN
WHERE
ID_SUBJECT = :OLD_ID_SUBJECT
and PHONE = :OLD_PHONE
Так должно быть, конечно.

Согласен, cтупил :-)


 
OW ©   (2011-03-14 11:53) [8]

Даже так:
UPDATE SUBJECT_PHONE
SET
 ID_SUBJECT = :ID_SUBJECT,
--  PHONE = :PHONE,      { TODO : Сделать в диалог }
 PHONE_NAME = :PHONE_NAME,
 DATE_BEGIN = :DATE_BEGIN,
 DATE_END = :DATE_END,
 ORDER_SORT = :ORDER_SORT,
 ALTERNATE_ADDRESS = :ALTERNATE_ADDRESS,
 UPDATE_STATUS = :UPDATE_STATUS,
 IN_09 = :IN_09,
 IS_FREE = :IS_FREE,
 IS_PARALLEL = :IS_PARALLEL,
 PAID_INFORM = :PAID_INFORM,
 PCOMMENT = :PCOMMENT,
 ADDRESS = :ADDRESS
WHERE
 ID_SUBJECT = :OLD_ID_SUBJECT
 and PHONE = :OLD_PHONE


 
Кщд   (2011-03-14 11:55) [9]

>OW ©   (14.03.11 11:17)  
1. select * from v$version

2. покажите результат:

select ID_SUBJECT, PHONE, DATE_BEGIN
from SUBJECT_PHONE SP
where
          SP.PHONE = "8342474312"
          and SP.ID_SUBJECT = 1624664


 
OW ©   (2011-03-14 12:02) [10]

Oracle Database 10g Enterprise Edition Release 10.2.0.5.0 - 64bi
PL/SQL Release 10.2.0.5.0 - Production
CORE 10.2.0.5.0 Production
TNS for Linux: Version 10.2.0.5.0 - Production
NLSRTL Version 10.2.0.5.0 - Production

1624664 8342474312 NULL

Да в общем все решилось,
всем спасибо



Страницы: 1 вся ветка

Текущий архив: 2014.08.03;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.006 c
15-1389006579
Sergey Masloff
2014-01-06 15:09
2014.08.03
Фантазия слабеет. Придумать говорящее имя процедуре ;-)


3-1300095610
Бинар
2011-03-14 12:40
2014.08.03
Прерывание запроса


15-1388694602
Юрий
2014-01-03 00:30
2014.08.03
С днем рождения ! 3 января 2014 пятница


15-1389558602
Юрий
2014-01-13 00:30
2014.08.03
С днем рождения ! 13 января 2014 понедельник


15-1387350030
Пит
2013-12-18 11:00
2014.08.03
Ветка Розыча о задачке?