我開發了一個匿名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並插入,它在我嘗試過的環境中編譯得很好。在你的最後應該有一些與數據有關的問題。 –