在Oracle中使用NVL失败

时间:2018-12-10 21:26:35

标签: sql oracle nvl

为什么是以下脚本:

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函数,以便如果我的第一个参数为null,则使用第二个参数。

1 个答案:

答案 0 :(得分:2)

您尝试插入的值之一未能通过约束验证。检查IMSR.T_IR_R_246对应的约束,您将知道哪个字段引起了问题。

另外,请注意,声明的这一部分没有意义:

NVL('', '1234456777')

由于Oracle将空字符串视为NULL值,因此上面的表达式将始终返回'1234456777',因此使用NVL有什么意义?

您说过,当将此表达式更改为NVL('11111111111', '1234456777')时,查询运行良好。这表明问题来自'1234456777'值,该值与您插入的第一列(CURR_POSITION)相对应。更改语句的该部分,就可以了。