我开发了一个匿名PL/SQL块,列出了每周每天雇用的雇员总数。然后将结果插入表中。为了优化过程并避免PL/SQL引擎和SQL引擎之间重复的上下文更改,我使用了BULK COLLECT AND FORALL实用程序。“BULK COLLECT SELECT”中的“不是GROUP BY表达式”
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 – psj01
没有FORALL并插入,它在我尝试过的环境中编译得很好。在你的最后应该有一些与数据有关的问题。 –