【发布时间】:2016-02-18 19:56:53
【问题描述】:
我已经在网上浏览了几个小时,试图确定我的代码有什么问题。我不断收到 ORA-01407: cannot update ("AMIOWN"."MEMBER"."LANGUAGE_X") 为 NULL。当合同表中的语言不为空时,我需要更新成员表中的语言。需要第三张表才能深入了解特定成员。下面是代码:
update member m
set language_x =
(select language_x
from contract c
where m.contract_nbr = c.contract_nbr and
c.language_x is not null and
m.member_nbr =
(select member_nbr
from member_span ms
where m.member_nbr = ms.member_nbr and
ms.void = ' ' and
ms.carrier = 'PM' and
ms.prog_nbr = 'GP' and
ms.region = 'TR' and
(ms.ymdeff <= 20160218 or ms.ymdeff > 20160218) and
ms.ymdend > 20160218
)
);
一些帖子还建议在最后一个括号检查后添加另一行:
在哪里存在(从合约 c 中选择 1,其中 m.contract_nbr = c.contract_nbr 和 c.language_x 不为空);
我在 unix 环境中工作,表包含在 amisys 数据库中。
感谢您的任何建议。
【问题讨论】:
-
几乎可以肯定有比使用所有这些子选择更好的方法来编写查询。如果没有看到您的数据结构或示例数据等,即使尝试也是不可能的。此外,如果没有看到任何数据,就不可能知道问题出在哪里,只能说可能没有符合您条件的行。如果根本找不到匹配项,则在子选择中使用
c.language_x is not null将无助于避免该问题。 -
有符合条件的记录。在编写代码之前分析了所有数据。
-
我想每个人都必须相信你的话,