如何在plsql中创建过程/函数来代替静态查询

时间:2018-02-15 05:48:02

标签: sql oracle plsql

我写了以下静态查询

SELECT (
        SUM(CASE 
                WHEN DATE BETWEEN add_months('22-MAR-17', 0) - 13
                        AND add_months('22-MAR-17', 0) - 7 THEN VOLUME ELSE 0 END ) ) LAST_WEEK_Volume
                    ,(
                        SUM(CASE 
                                WHEN DATE BETWEEN add_months('22-MAR-17', 0) - 6
                                        AND add_months('22-MAR-17', 0)
                                    THEN VOLUME
                                ELSE 0
                                END)
                        ) THIS_WEEK_Volume FROM abc
        )
        )

问题状态 - 我想为last_Week_volume和this_week_volume创建函数并传递它。你可以采取动态查询吗? 通过它可以让我计算上周的日数量和旧的两年数据的本周量

1 个答案:

答案 0 :(得分:0)

试试这个

--creating function

CREATE OR REPLACE FUNCTION Calculate_Volume(Date_Val DATE,Start NUMBER, End Number)
   RETURN NUMBER
   IS Sum_Value NUMBER(10,2);

BEGIN
   Sum_Value := 0;

   SELECT (SUM (CASE WHERE DATE BETWEEN add_months(Date_Val ,0)- Start AND add_months(Date_Val ,0)- End then VOLUME ELSE 0 END)) INTO Sum_Value 
   FROM ABC

   RETURN Sum_Value;

END Calculate_Volume;

--Calling the function:

SELECT Calculate_Volume('22-MAR-17', 13, 7) AS LAST_WEEK_Volume, Calculate_Volume('22-MAR-17', 6, 0) AS THIS_WEEK_Volume,
FROM ABC;