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

Cita:
Iniciado por jlct Ver Mensaje
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. CREATE OR REPLACE TYPE T_TableRecord AS TABLE OF T_Record;
  24. CREATE OR REPLACE TYPE T_TableRecordEV AS TABLE OF T_RecordEV;
  25. CREATE OR REPLACE TYPE T_TableRecordNode AS TABLE OF T_RecordNode;
  26.  
  27. -- Creado el Tipo de Tabla
  28.  
  29. CREATE OR REPLACE FUNCTION FN_TableRecord(valor1 IN NUMERIC, valor2 IN NUMERIC)
  30. RETURN T_TableRecord
  31. AS
  32. rs T_TableRecord;
  33. recor T_TableRecordNode;
  34. rsl T_TableRecordEV;
  35. sumary CHAR(1);
  36. BEGIN
  37. IF $1 IS NULL THEN
  38.     FOR
  39.     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
  40.         LOOP
  41.             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))
  42.             LOOP
  43.                 RETURN rs;
  44.             END LOOP;
  45.         END LOOP;
  46. ELSE
  47.     sumary := (SELECT issummary FROM c_elementvalue WHERE c_elementvalue_id = $1);
  48.     IF sumary = 'Y' THEN
  49.         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'
  50.             LOOP
  51.                 FOR rs IN SELECT * FROM TABLE(FN_TableRecord(recor.node_id,$2))
  52.                 LOOP
  53.                     RETURN rs;
  54.                 END LOOP;
  55.             END LOOP;
  56.     ELSE
  57.         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
  58.         LOOP
  59.             RETURN rs;
  60.         END LOOP;
  61.     END IF;
  62. END IF;
  63. END;
  64. LANGUAGE 'PL/SQL';
Así es como lo tengo actualmente, el raise era solo para comprobar si entraba o no en la función, pero ya me explicaste que quedo mal compilada y por ende no funciona.