正确地循环遍历数据集,并显示或输出所有结果,而不使用临时表



我有一些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  |
+----------+-------|

等等

EDIT:没有权限创建TABLE,甚至没有权限创建GLOBAL TEMPORARY TABLE。这需要在没有临时表的情况下完成。

这将打印您的查询。

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;

相关内容

  • 没有找到相关文章

最新更新