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