1. ホーム
  2. oracle

[解決済み] ORA-01407:NULLに更新できません。

2022-02-14 06:23:19

質問

列 "p1_high_edu_ctry" を更新するための私の sql クエリは次のとおりです: - 。

 update ps_personal_data J
 set (J.p1_high_edu_ctry) = (SELECT P.p1_high_edu_ctry FROM PS_PERS_DATA_EFFDT P 
 WHERE P.EFFDT=(SELECT MAX(K.EFFDT) FROM PS_PERS_DATA_EFFDT K
 WHERE K.EFFDT<=SYSDATE
 AND   J.EMPLID IN(SELECT H.EMPLID FROM PS_AUDIT_PER_EFFDT H 
 where h.AUDIT_OPRID='CHGH00000063232')))
 where exists(select 1 from PS_AUDIT_PER_EFFDT q where q.emplid=j.emplid) ;

しかし、更新中にエラーメッセージが表示されます:-)

ERROR at line 2:
ORA-01407: cannot update ("SYSADM"."PS_PERSONAL_DATA"."P1_HIGH_EDU_CTRY") to NULL

何かご提案がありましたら、お願いします。

どうすればいいですか?

これを試してみてください

 MERGE INTO ps_personal_data J
 USING
 (
   SELECT P.p1_high_edu_ctry, p.emplid 
   FROM PS_PERS_DATA_EFFDT P 
   WHERE P.EFFDT=
              (
                SELECT MAX(K.EFFDT) FROM PS_PERS_DATA_EFFDT K
                WHERE K.EFFDT<=SYSDATE AND P.EMPLID = K.EMPLID 
                -- updated this condition , 
                -- you need to check max date by emplid 
                -- not max date from full table               
               )
   AND   P.EMPLID IN (SELECT H.EMPLID FROM PS_AUDIT_PER_EFFDT H 
                where h.AUDIT_OPRID='CHGH00000063232')
 ) v ON (J.emplid = v.emplid)
 WHEN MATCHED THEN UPDATE
 set J.p1_high_edu_ctry = nvl(v.p1_high_edu_ctry,' ');