为什么是以下脚本:
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,则使用第二个参数。
答案 0 :(得分:2)
您尝试插入的值之一未能通过约束验证。检查IMSR.T_IR_R_246
对应的约束,您将知道哪个字段引起了问题。
另外,请注意,声明的这一部分没有意义:
NVL('', '1234456777')
由于Oracle将空字符串视为NULL
值,因此上面的表达式将始终返回'1234456777'
,因此使用NVL
有什么意义?
您说过,当将此表达式更改为NVL('11111111111', '1234456777')
时,查询运行良好。这表明问题来自'1234456777'
值,该值与您插入的第一列(CURR_POSITION
)相对应。更改语句的该部分,就可以了。