Bueno, a nivel de consolta, anduvo.
Ahora surge este inconveniente: Siguiendo modelos de ejemplo en los foros de Oracle, necesito usar un FORALL para recorrer todo el resultado del BULK SELECT, pero al compilar, el sistema me dice que no puedo referenciar campos directamente en un FORALL.
Muestro:
Código SQL:
Ver originalCREATE OR REPLACE PROCEDURE "IniciarTabla" IS
TYPE t_employ IS TABLE OF EMPLOYEES%ROWTYPE;
t_employ;
BEGIN
SELECT
EMPLOYEE_ID,
FIRST_NAME,
LAST_NAME,
EMAIL,
PHONE_NUMBER,
HIRE_DATE,
JOB_ID,
SALARY,
COMMISSION_PCT,
MANAGER_ID,
DEPARTMENT_ID,
NULL
BULK COLLECT INTO t_row
FROM EMPLOYEES;
// En este punto me dice que t_row(i).EMPLOYEE_ID no se puede usar....
FORALL i IN t_row.FIRST .. t_row.LAST
UPDATE EMPLOYEES SET BAJA = SYSDATE
WHERE EMPLOYEE_ID = t_row(i).EMPLOYEE_ID;
FORALL i IN t_row.FIRST .. t_row.LAST
INSERT INTO EMPLOYEES(
EMPLOYEE_ID,
FIRST_NAME,
LAST_NAME,
EMAIL,
PHONE_NUMBER,
HIRE_DATE,
JOB_ID,
SALARY,
COMMISSION_PCT,
MANAGER_ID,
DEPARTMENT_ID,
BAJA)
VALUES(
EMPLOYEES_SEQ.NEXTVAL,
t_row(i).FIRST_NAME,
t_row(i).LAST_NAME,
t_row(i).EMAIL,
t_row(i).PHONE_NUMBER,
SYSDATE,
t_row(i).JOB_ID,
t_row(i).SALARY,
t_row(i).COMMISSION_PCT,
t_row(i).MANAGER_ID,
t_row(i).DEPARTMENT_ID,
NULL);
COMMIT;
END;
¿Cómo sería la forma correcta para hacer lo que necesito?