我有一份日期清单。 该列表将作为java集合传递。 该清单是动态的。我想检查列表中的日期是否在我的startDate和endDate之间,而不是使用存储过程,最好。
我可以遍历列表并对列表的每个startDate / endDate对执行查询。 但是有可能避免迭代并在一个语句中完成所有操作吗?
像
这样的东西select * from myTable
where <datesInList> between startDate and endDate;
Oracle有办法做到这一点吗?
答案 0 :(得分:2)
您可以使用TABLE函数将数组转换为表,然后在SQL查询中使用它。例如:
DECLARE
v_dates sys.ODCIDateList := sys.ODCIDateList(TO_DATE('01-01-2001','DD-MM-RRRR'),
TO_DATE('01-02-2001','DD-MM-RRRR'),
TO_DATE('01-03-2001','DD-MM-RRRR'),
TO_DATE('01-04-2001','DD-MM-RRRR'));
n NUMBER;
BEGIN
SELECT COUNT(1)
INTO n
FROM TABLE(v_dates)
WHERE COLUMN_VALUE NOT BETWEEN start_date AND end_date;
IF n > 0 THEN
dbms_output.put_line('There''s ' || n || ' dates out of the range');
ELSE
dbms_output.put_line('All dates are in the range');
END IF;
END;