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 函数,以便如果我的第一个参数为空,则使用第二个。
解决方案
您尝试插入的值之一未能通过约束验证。检查对应的约束IMSR.T_IR_R_246
,您将知道哪个字段导致了问题。
另外,请注意,您的这部分陈述没有意义:
NVL('', '1234456777')
由于 Oracle 将空字符串视为一个NULL
值,因此上述表达式将始终返回'1234456777'
,那么使用 的意义NVL
何在?
您说过,当您将此表达式更改为NVL('11111111111', '1234456777')
then 查询运行良好。这表明问题来自与'1234456777'
您插入的第一列 ( CURR_POSITION
) 相对应的值。更改声明的那部分,你应该没问题。
推荐阅读
- mysql - 完整性约束瓶
- java - JPA 保存多个实体在 Spring @Transactional 中不回滚并启用 Exception.class 回滚
- r - 如何使用 plot_ly 绘制 3d 曲面?
- laravel - Validator.php 第 2631 行中的 ErrorException:strpos() 期望参数 1 为字符串,给定对象
- android - 使用正确的上下文
- javascript - JavaScript:获取回调函数的对象引用
- gis - 使用 Presto 进行地理空间聚类
- c# - 无法使用 Serilog MongoDb 接收器进行记录
- java - 理解 ArrayList 中 clear() 背后的逻辑
- javascript - 从源代码中删除所有 aria-hidden="true"