在Oracle 10中将触发器中的日期与null值进行比较

时间:2013-12-07 10:15:00

标签: sql oracle null

如果我问一个已经回答的问题,我很抱歉,但我找不到任何答案。我在Oracle 10中编写了一个触发器,在那里我将2个日期作为数字进行比较,但是我有一个问题,如果第二个值为null。

我有两个表:Hercidat_umr_her:date)和filmyrok_vyd:integer)。

问题是dat_umr_her有时是NULL,然后我无法插入任何新的Herec,因为在if语句中引发了一个应用程序错误。

CREATE OR REPLACE TRIGGER "XVIKD00"."DATUM_UMRTIA_HEREC" 
  BEFORE INSERT OR UPDATE 
  ON HERCI
  FOR EACH ROW 
DECLARE 
  l_ROK_VYDANIA filmy.ROK_VYD%TYPE;
BEGIN 
  SELECT FILMY.ROK_VYD
    INTO l_ROK_VYDANIA 
    FROM FILMY
   WHERE FILMY.ID_FILM = :new.ID_HEREC;

  IF( extract( year from :new.dat_umr_her ) < l_ROK_VYDANIA )
  THEN
    RAISE_APPLICATION_ERROR(-2009,'Dátumy nie su v správnom časovom slede'); 
  END IF;
END;

1 个答案:

答案 0 :(得分:1)

不确定您的确切问题在哪里,但有两种基本方法:

使用nvlcoalesce将NULL值替换为某个默认值(在您的情况下可能是过去或将来的日期方式。

或者,如果您想在比较中使用它,可以使用is null

从评论

来看,这实际上可能就是你所需要的
IF( 
    (:new.dat_umr_her is not null) 
    AND extract( year from :new.dat_umr_her ) < l_ROK_VYDANIA 
)