首页 > 解决方案 > 在 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 函数,以便如果我的第一个参数为空,则使用第二个。

标签: sqloraclenvl

解决方案


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

另外,请注意,您的这部分陈述没有意义:

NVL('', '1234456777')

由于 Oracle 将空字符串视为一个NULL值,因此上述表达式将始终返回'1234456777',那么使用 的意义NVL何在?

您说过,当您将此表达式更改为NVL('11111111111', '1234456777')then 查询运行良好。这表明问题来自与'1234456777'您插入的第一列 ( CURR_POSITION) 相对应的值。更改声明的那部分,你应该没问题。


推荐阅读