Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Задачка с одним неизвестным / 6 сообщений из 6, страница 1 из 1
06.09.2018, 12:10
    #39698926
MaXie
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Задачка с одним неизвестным
Доброго всем дня.

Есть таблица:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
CREATE TABLE TBL_MD5
(
  CODE      VARCHAR2(25)    NOT NULL,
  MD5       RAW(16)         NOT NULL,
  VAL       VARCHAR2(250), 
  PRIMARY KEY (CODE, MD5) ENABLE VALIDATE
)
ORGANIZATION INDEX;


И есть попытка изменить в этой таблице данные:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
DECLARE
    TYPE t_md5      IS TABLE OF TBL_MD5%ROWTYPE;
       
    arr_MD5   t_md5 := t_md5();
BEGIN
    FORALL i IN 1..arr_MD5.COUNT
        MERGE INTO TBL_MD5 DST
        USING (
            SELECT
                arr_MD5(i).CODE     AS CODE,
                arr_MD5(i).MD5      AS MD5,
                p_ext_file          AS VAL                        
            FROM DUAL
        ) SRC
        ON (
            DST.CODE = SRC.CODE
        )
        WHEN MATCHED THEN UPDATE
        SET
            MD5 = SRC.MD5,
            VAL = SRC.VAL
        WHEN NOT MATCHED THEN INSERT
        VALUES(
            SRC.CODE,
            SRC.MD5,
            SRC.VAL
        );
END;    


Вопрос: что должен содержать массив arr_MD5 , чтобы вызвать ошибку " ORA-00001: unique constraint (...) violated " ?

Спасибо.
...
Рейтинг: 0 / 0
06.09.2018, 12:21
    #39698939
Щукина Анна
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Задачка с одним неизвестным
MaXie,

Код: plsql
1.
2.
3.
4.
select CODE, count(1) as cnt
  from TBL_MD5
 group by CODE
having count(1) > 1
...
Рейтинг: 0 / 0
06.09.2018, 12:36
    #39698945
MaXie
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Задачка с одним неизвестным
Щукина Анна,

благодарю за отклик.
Такие записи есть и в рамках данной IOT-таблицы это допустимо. Вопрос, как возможно на указанном MERGE получить ошибку ограничения целостности по PK ключу?

Почему спрашиваю? Ночью в логе было получено сообщение об ошибке. Данные, которые служили источником для массива arr_MD5 , с того момента претерпели неоднократные изменения.
...
Рейтинг: 0 / 0
06.09.2018, 12:41
    #39698948
MaXie
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Задачка с одним неизвестным
Щукина Анна,

Дошло! Спасибо! )
...
Рейтинг: 0 / 0
06.09.2018, 12:42
    #39698949
Щукина Анна
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Задачка с одним неизвестным
MaXie,

у вас первичный ключ - составной, по двум полям. при наличии дублей по CODE - требуется обеспечить уникальность по MD5.
теперь подумайте о том, что произойдет, когда в ваш MERGE попадет запись с CODE - из списка дубликатов...
...
Рейтинг: 0 / 0
06.09.2018, 12:44
    #39698951
Щукина Анна
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Задачка с одним неизвестным
MaXieЩукина Анна,

Дошло! Спасибо! )опередили "на кнопке"... :)
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Задачка с одним неизвестным / 6 сообщений из 6, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]