小编NHa*_*sen的帖子

优化SQL日期功能

我编写了一个函数(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)

sql oracle optimization function

2
推荐指数
1
解决办法
93
查看次数

标签 统计

function ×1

optimization ×1

oracle ×1

sql ×1