Plsql 正确循环数据集,显示或输出所有结果,而不使用临时表
我有一些PL/SQL代码,打算在每年每个月的整个月范围内循环,然后检索每月发生的次数 现在,我并没有对存在的每一年都进行嵌套循环,因为我需要在继续之前正确地理解它是如何工作的 这是我的密码: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
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;