正确循环数据集,显示或输出所有结果,无需使用临时表

时间:2015-10-02 13:44:04

标签: plsql

我有一些意图的PL / SQL代码循环遍历每年每个月的整个月份范围,然后检索某事发生的次数在一个月内。

现在,我没有为每年存在的嵌套循环,因为我需要在继续之前正确理解其工作原理。

这是我的代码:

BEGIN
   FOR i IN 1..11 LOOP
        BEGIN
            SELECT COUNT(UNIQUE EMPLOYEE) as Emp FROM (SELECT DATE_COL, EMPLOYEE
                FROM CORE.DATE_TEST 
            WHERE DATE_COL  >= TO_DATE(i || '/1/2015 00:00:00', 'MM/DD/YYYY HH24:MI:SS')
                AND DATE_COL  < TO_DATE((i + 1) || '/1/2015 23:59:59', 'MM/DD/YYYY HH24:MI:SS')
            ORDER BY DATE_COL ASC);
        END;
   END LOOP;
   COMMIT;
END;

我收到此错误:PLS-00428: an INTO clause is expected in this SELECT statement

显然,我需要将结果选择到某事中,但那是什么,我不太确定。这甚至可能不是正确的方法。

但是,我想要获取所有这些结果,并将它们合并到一个表中,如下所示:

+----------+-------+
|   date   | count |
+----------+-------+
| January  |  200  |
+----------+-------|
| February |  100  |
+----------+-------|
| March    |  500  |
+----------+-------|

等等。

编辑:没有特权可以创建TABLE,甚至是GLOBAL TEMPORARY TABLE。这需要在没有临时表的情况下完成。

1 个答案:

答案 0 :(得分:0)

这将打印您的查询。

DECLARE 
    V_number varchar2(100);
    BEGIN
       FOR i IN 1..11 LOOP

                    SELECT COUNT(UNIQUE EMPLOYEE) AS EMP INTO V_number FROM (SELECT CURRENT_DATE, EMPLOYEE
                            FROM CORE.DATE_TEST 
                    WHERE CURRENT_DATE  >= TO_DATE(i || '/1/2015 00:00:00', 'MM/DD/YYYY HH24:MI:SS')
                            AND CURRENT_DATE  < TO_DATE((i + 1) || '/1/2015 23:59:59', 'MM/DD/YYYY HH24:MI:SS')
                    ORDER BY CURRENT_DATE ASC);

                    dbms_output.put_line(TO_CHAR(TO_DATE(I || '/1/2015 00:00:00', 'MM/DD/YYYY HH24:MI:SS'), 'Month')||'  '||V_NUMBER);      
       END LOOP;
    END;