【发布时间】:2017-08-10 23:06:34
【问题描述】:
我开发了一个匿名 PL / SQL 块,它列出了一周中每一天雇用的员工总数。然后将结果插入表中。为了优化流程并避免 PL / SQL 引擎和 SQL 引擎之间重复的上下文更改,我使用了 BULK COLLECT AND FORALL 实用程序。
DECLARE
TYPE R_EMLEADOS_DIAS_SEMANA IS RECORD(
totalEmpleados INTEGER,
dayOfWeek VARCHAR2(10)
);
TYPE t_empleados IS TABLE OF R_EMLEADOS_DIAS_SEMANA;
v_empleados t_empleados;
BEGIN
SELECT COUNT(*) AS TOTAL , TO_CHAR(HIRE_DATE,'DAY') AS DAY_OF_WEEK
BULK COLLECT INTO v_empleados
FROM EMPLOYEES GROUP BY TO_CHAR(HIRE_DATE,'DAY');
FORALL v_index IN 1 .. v_empleados.COUNT SAVE EXCEPTIONS
INSERT INTO EJERCICIOS (EJERCICIO, VALOR_1, VALOR_2)
VALUES (2, v_empleados(v_index).totalEmpleados, v_empleados(v_index).totalEmpleados || ' EMPLEADOS DADOS DE ALTA EL ' || v_empleados(v_index).dayOfWeek);
COMMIT WORK;
EXCEPTION
WHEN OTHERS THEN
IF SQLCODE = -24381 THEN
FOR v_index IN 1 .. SQL%BULK_EXCEPTIONS.COUNT LOOP
DBMS_OUTPUT.PUT_LINE (
SQL%BULK_EXCEPTIONS (v_index).ERROR_INDEX
|| ':'
|| SQL%BULK_EXCEPTIONS (v_index).ERROR_CODE);
END LOOP;
ELSE
RAISE;
END IF;
END;
/
当我运行这个块时,我得到以下编译错误:
ORA-00979: Is not a GROUP BY expression
ORA-06512: en línea 31
ORA-06512: en línea 13
00979. 00000 - "not a GROUP BY expression"
我不明白为什么查询不起作用。如果我正常运行它,它会完美运行。
有人知道怎么解决吗?提前致谢。
练习使用的表格:
CREATE TABLE EJERCICIOS (
EJERCICIO NUMBER(3) NOT NULL,
VALOR_1 NUMBER(4) NOT NULL,
VALOR_2 VARCHAR2(100) NOT NULL
);
【问题讨论】:
-
你是否已经尝试说...GROUP BY HIRE_DATE
-
没有 forall 和 insert ,它在我尝试过的环境中编译得很好。你的数据应该有一些问题。
标签: sql plsql plsqldeveloper