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

Plsql 正确循环数据集,显示或输出所有结果,而不使用临时表,plsql,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

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


编辑:没有创建表的权限,甚至没有创建全局临时表的权限。这需要在没有临时表的情况下完成。

这将打印您的查询

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;

对于TEST_表:PL/SQL:ORA-00942:表或视图不存在。不确定如何创建临时表。显然,这些在Oracle中并不经常使用;那也不行。最后一部分,结束;抛出此错误:ORA-00911:无效字符。不过,我把它放在声明之前。你能用它应该看起来的方式编辑你的答案吗?你必须单独执行它们。我已经编辑了我的答案。ORA-01031:权限不足。我似乎需要在不使用临时表的情况下执行此操作。这可以作为一个SQL语句来实现,以获取每个月和每年的员工数量。请给我一个示例,好吗?您可以创建一个查询,生成一个月的列表。许多示例都应该是Googleable的,其中许多都在StackOverflow上,并使用与示例查询中相同的连接方法将其连接到CORE.DATE_测试表。谢谢您的建议,David。自从你提出后,我一直在尝试,但一直无法使它工作。你能给我举个例子吗?你能修改你的问题来展示你的尝试吗?
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;