Ver Mensaje Individual
  #4 (permalink)  
Antiguo 31/05/2012, 10:30
Avatar de gnzsoloyo
gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Tipo no reconocido en SP

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 original
  1. CREATE OR REPLACE PROCEDURE "IniciarTabla" IS
  2. TYPE t_employ IS TABLE OF EMPLOYEES%ROWTYPE;
  3. t_employ;
  4. BEGIN
  5.     SELECT
  6.         EMPLOYEE_ID,
  7.         FIRST_NAME,
  8.         LAST_NAME,
  9.         EMAIL,
  10.         PHONE_NUMBER,
  11.         HIRE_DATE,
  12.         JOB_ID,
  13.         SALARY,
  14.         COMMISSION_PCT,
  15.         MANAGER_ID,
  16.         DEPARTMENT_ID,
  17.         NULL
  18.     BULK COLLECT INTO t_row
  19.         FROM EMPLOYEES;
  20.  
  21.         // En este punto me dice que t_row(i).EMPLOYEE_ID no se puede usar....
  22.         FORALL i IN t_row.FIRST .. t_row.LAST
  23.     UPDATE EMPLOYEES SET BAJA = SYSDATE
  24.     WHERE EMPLOYEE_ID = t_row(i).EMPLOYEE_ID;
  25.  
  26.     FORALL i IN t_row.FIRST .. t_row.LAST
  27.     INSERT INTO EMPLOYEES(
  28.         EMPLOYEE_ID,
  29.         FIRST_NAME,
  30.         LAST_NAME,
  31.         EMAIL,
  32.         PHONE_NUMBER,
  33.         HIRE_DATE,
  34.         JOB_ID,
  35.         SALARY,
  36.         COMMISSION_PCT,
  37.         MANAGER_ID,
  38.         DEPARTMENT_ID,
  39.         BAJA)
  40.     VALUES(
  41.         EMPLOYEES_SEQ.NEXTVAL,
  42.         t_row(i).FIRST_NAME,
  43.         t_row(i).LAST_NAME,
  44.         t_row(i).EMAIL,
  45.         t_row(i).PHONE_NUMBER,
  46.         SYSDATE,
  47.         t_row(i).JOB_ID,
  48.         t_row(i).SALARY,
  49.         t_row(i).COMMISSION_PCT,
  50.         t_row(i).MANAGER_ID,
  51.         t_row(i).DEPARTMENT_ID,
  52.         NULL);
  53.     COMMIT;
  54. END;

¿Cómo sería la forma correcta para hacer lo que necesito?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)