Ver Mensaje Individual
  #1 (permalink)  
Antiguo 16/04/2013, 07:26
Avatar de jlct
jlct
 
Fecha de Ingreso: abril-2012
Ubicación: Venezuela
Mensajes: 148
Antigüedad: 12 años, 1 mes
Puntos: 19
Problemas con ejecución de funcion en Oracle

Hola Amigos de FDW, tengo creada esta función (no estoy seguro si en realidad funciona, soy novato con oracle)
Código SQL:
Ver original
  1. CREATE OR REPLACE TYPE T_Record IS OBJECT
  2. (
  3. Account_ID NUMERIC,
  4. DATEACCT TIMESTAMP,
  5. AMTSourceDR NUMERIC,
  6. AMTSourceCR NUMERIC,
  7. AMTSourceN NUMERIC
  8. );
  9.  
  10. CREATE OR REPLACE TYPE T_RecordNode IS OBJECT
  11. (
  12. nodeid NUMERIC
  13. );
  14.  
  15. CREATE OR REPLACE TYPE T_RecordEV IS OBJECT
  16. (
  17. elementvalue NUMERIC,
  18. reportline NUMERIC
  19. );
  20.  
  21. -- Creado el Tipo de Objeto
  22.  
  23. DROP TYPE T_TableRecordNode
  24.  
  25. CREATE OR REPLACE TYPE T_TableRecord AS TABLE OF T_Record;
  26. CREATE OR REPLACE TYPE T_TableRecordEV AS TABLE OF T_RecordEV;
  27. CREATE OR REPLACE TYPE T_TableRecordNode AS TABLE OF T_RecordNode;
  28.  
  29. -- Creado el Tipo de Tabla
  30.  
  31. CREATE OR REPLACE FUNCTION FN_TableRecord(valor1 IN NUMERIC, valor2 IN NUMERIC)
  32. RETURN T_TableRecord
  33. AS
  34. rs T_TableRecord;
  35. recor T_TableRecordNode;
  36. rsl T_TableRecordEV;
  37. sumary CHAR(1);
  38. BEGIN
  39. RAISE 'entro';
  40. IF $1 IS NULL THEN
  41.     FOR
  42.     SELECT rsl IN SELECT rsu.c_elementvalue_id, rsu.pa_reportline_id FROM c_elementvalue ev INNER JOIN pa_reportsource rsu ON ev.c_elementvalue_id = rsu.c_elementvalue_id WHERE ev.ad_client_id = $2
  43.         LOOP
  44.             FOR rs IN SELECT rsl.pa_reportline_id, rsl.c_elementvalue_id,DATEACCT, AmtSourceDR, AmtSourceCR, AmtSourceN FROM TABLE(FN_TableRecord(rsl.c_elementvalue_id,$2))
  45.             LOOP
  46.                 RETURN rs;
  47.             END LOOP;
  48.         END LOOP;
  49. ELSE
  50.     sumary := (SELECT issummary FROM c_elementvalue WHERE c_elementvalue_id = $1);
  51.     IF sumary = 'Y' THEN
  52.         FOR recor IN SELECT node_id FROM ad_treenode tn INNER JOIN ad_tree t ON tn.ad_tree_id = t.ad_tree_id WHERE parent_id = $1 AND t.treetype = 'EV'
  53.             LOOP
  54.                 FOR rs IN SELECT * FROM TABLE(FN_TableRecord(recor.node_id,$2))
  55.                 LOOP
  56.                     RETURN rs;
  57.                 END LOOP;
  58.             END LOOP;
  59.     ELSE
  60.         FOR rs IN SELECT Account_ID, DATEACCT, SUM(AmtSourceDR) AS AmtSourceDR,SUM(AmtSourceCR) AS AmtSourceCR,SUM(AmtSourceDR-AmtSourceCR) AS AmtSourceN FROM FACT_ACCT WHERE Account_ID = $1 GROUP BY Account_ID,DATEACCT
  61.         LOOP
  62.             RETURN rs;
  63.         END LOOP;
  64.     END IF;
  65. END IF;
  66. END;
  67. LANGUAGE 'PL/SQL';
Pero cuando la voy a ejecutar
Código SQL:
Ver original
  1. SELECT * FROM TABLE(FN_TableRecord(NULL,1000000))
Me genera este error:
ORA-06575: La función o el paquete FN_TABLERECORD tienen en un estado no válido
Línea de script 69, línea de instrucción 1, columna 20


Espero me puedan ayudar, Gracias.

Última edición por gnzsoloyo; 16/04/2013 a las 12:42 Razón: SQL mal etiquetado