Сбой NVL в Oracle - PullRequest
       31

Сбой NVL в Oracle

0 голосов
/ 11 декабря 2018

Почему следующий скрипт:

INSERT INTO PLAYER(CURR_POSITION, USR_ID, PLAYER_TEAM_ID)
VALUES (NVL('', '1234456777'), '223233333333', (SELECT TEAM_ID FROM TEAM WHERE P_T_CD = '1111111'));

Дает мне эту ошибку:

ORA-02291: integrity constraint (TIMSR.T_IR_R_246) violated - parent key not found

Принимая во внимание, когда я структурирую свой оператор NVL как:

NVL('11111111111', '1234456777')... 

Работает без проблем.

Я пытаюсь использовать функцию NVL, чтобы, если мой первый параметр был нулевым, использовался второй.

1 Ответ

0 голосов
/ 11 декабря 2018

Одно из значений, которое вы пытаетесь вставить, не проходит проверку ограничения.Проверьте, какому ограничению IMSR.T_IR_R_246 соответствует, и вы узнаете, какие поля вызывают проблему.

Также обратите внимание, что эта часть вашего утверждения не имеет смысла:

NVL('', '1234456777')

Поскольку Oracle рассматривает пустую строку как значение NULL, приведенное выше выражение всегда будет возвращать '1234456777', следовательно, какой смысл использовать NVL?

Вы указали, что когда вы изменяете это выражение наNVL('11111111111', '1234456777') тогда запрос работает нормально.Это показывает, что проблема связана со значением '1234456777', которое соответствует первому вставляемому столбцу (CURR_POSITION).Измените эту часть заявления, и все будет в порядке.

...