Oracle mechanics

10.05.2011

Oracle 11.2: операция merge игнорирует check constraints

Filed under: bugs,Oracle — Игорь Усольцев @ 23:33

[15:50:47] слушай у тебя есть доступ к какому нибудь oracle 11.2 ?
можешь проверить простой примерчик:

SQL> create table t1 (id number, n number);
 Table created.

SQL> ALTER TABLE t1 ADD (CONSTRAINT t1_constraint CHECK (n>=0));
 Table altered.

SQL> insert into t1 values (1,1);
 1 row created.

SQL> commit;
 Commit complete.

SQL> update t1 set n=n-2 where id=1;
 update t1 set n=n-2 where id=1
 *
 ERROR at line 1:
 ORA-02290: check constraint (SYSTEM.T1_CONSTRAINT) violated

как оно и должно быть

SQL> merge into t1
 2 using (select 2 n,1 id from dual) ll
 3 on (t1.id = ll.id)
 4 when matched then update set t1.n = t1.n - ll.n;

1 row merged.

SQL> commit;
 Commit complete.

SQL>select * from t1;

ID N
 ---------- ----------
 1 -1

SQL> select version from v$instance;

VERSION
 -----------------
 11.2.0.1.0

[15:52:32] сцуко глючное :(

[15:55:34] Bug 9285259: MERGE IGNORES CHECK CONSTRAINT:
…on 11.1.0.7, we receive ORA-2290 on merge, as we should…
[15:56:23] Fixed in Product Version 12.1
подожди немного, как новая версия выйдет ;)

[15:47:03] кстати есть Patch 9285259: MERGE IGNORES CHECK CONSTRAINT
публично виден только для Linux x86-64 Oracle поверх 11.2.0.2.0 ;)

1 комментарий »

  1. супер! у меня тоже отработало :)

    комментарий от Аноним — 02.08.2012 @ 14:02 | Ответить


RSS feed for comments on this post. TrackBack URI

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s

Блог на WordPress.com.

%d такие блоггеры, как: