我编写了一个函数(Oracle SQL),它根据不同国家的日历计算两个日期之间的工作日数.它需要运行数千次,因此速度非常重要.您输入一个开始日期,结束日期和给定日历的名称,例如"US","UK"等.输入参数在不同的SQL中传递,但是现在我还在测试.该功能使用假期表来查找日期之间的非工作日.该表包含不同国家的所有周末和国家法定假日.问题是尽管使用了游标,但功能很慢.有没有提示,如何使功能更快?我怀疑函数中的select查询是问题所在.我可能错了,但我不知道该怎么办.
CREATE OR REPLACE FUNCTION Test (in_dt1 DATE,
in_dt2 DATE,
in_Calender VARCHAR)
RETURN NUMBER
IS
Count_days NUMBER := 0;
beg_dt DATE;
End_dt DATE;
Curr_dt DATE;
Cursor_dato DATE;
CURSOR C1
IS
SELECT b.holiday
FROM calendars a
INNER JOIN holidays b ON a.calik = b.calik
WHERE a.cal = in_Calender AND holiday >= in_dt1 AND holiday <= in_dt2;
BEGIN
OPEN c1;
beg_dt := LEAST (in_dt1, in_dt2);
End_dt := GREATEST (in_dt1, in_dt2);
Curr_dt := beg_dt + 1;
<<OUTER>>
WHILE Curr_dt <= End_dt
LOOP …Run Code Online (Sandbox Code Playgroud)