0

我在 PL/SQL 中编写了一个布尔函数,它将日期作为参数,并根据包含假期日期的表检查参数,如果参数在表中,则函数返回 TRUE,否则返回 FALSE。代码如下所示:

CREATE OR REPLACE
FUNCTION isholiday (p_holiday DATE)
RETURN BOOLEAN

IS

CURSOR c_holiday is SELECT holiday_date FROM dbp_holiday;

BEGIN

FOR r1 IN c_holiday
LOOP
    IF p_holiday = r1.holiday_date
    THEN
        RETURN TRUE;
    ELSE 
        RETURN FALSE;
    END IF;
END loop;

END;

即使我输入了一个有效的假期(例如 to_date('01-01-2013', 'dd-mm-yyy') 它在表中)作为参数,该函数也会返回 false。

该表是 Oracle 表,其名称为 DBP_HOLIDAY,它只有一列类型为 DATE,其名称为 Holiday_date。

请给一些建议。谢谢

4

1 回答 1

3

如果光标中的第一条记录与输入日期不匹配,它会直接返回 FALSE,而不检查其他记录。这里不需要光标。你可以像这样简化它。

CREATE OR REPLACE FUNCTION isholiday (p_holiday DATE)
   RETURN BOOLEAN
IS
   x   NUMBER(1);
BEGIN
   SELECT 1
     INTO x
     FROM DBP_HOLIDAY
    WHERE holiday_date = p_holiday;

   RETURN TRUE;
EXCEPTION
   WHEN NO_DATA_FOUND
   THEN
      RETURN FALSE;
END;
于 2013-06-24T04:36:21.650 回答