我有一些意图的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
。这需要在没有临时表的情况下完成。
答案 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;