Ver Mensaje Individual
  #1 (permalink)  
Antiguo 07/09/2006, 14:13
lenz
 
Fecha de Ingreso: agosto-2003
Mensajes: 203
Antigüedad: 20 años, 8 meses
Puntos: 0
Como Ordenar Arbol o secciones anidadas en funcion

Estoy tratando de armar un listado de secciones anidadas, donde los hijos quiero ordenarlos por el campo orden y no por el id de cracion. Logre hacerlo a traves de un query pero cuando lo coloco en una funcion me tira error. el codigo del query es
Código:
SELECT s.id_seccion AS id_seccion,
	   ordenS,
       LPAD ('-', (s.nivel - 1) * 1, '-') || s.nombre AS nombrearbol,
       s.fk_id_modulo AS fk_id_modulo,
       CASE (s.habilitado)
          WHEN '1'
             THEN 'Si'
          ELSE 'No'
       END AS habilitado
  FROM (SELECT     s1.*, itf.orden as ordenS, LEVEL AS nivel
              FROM secciones s1 LEFT JOIN items_front itf
                   ON itf.fk_id_seccion = s1.id_seccion
             WHERE s1.borrado = '0'
        CONNECT BY PRIOR s1.id_seccion = s1.fk_id_seccion
        START WITH s1.fk_id_seccion IS NULL
          ORDER SIBLINGS BY ordenS) s
y en la funcion me dice que el ORDER SIBLINGS BY no es valido

Necesitaria saber si es posible usar el SIBLINGS dentro de las funciones y de que forma y si no alguna opcion para poder ordenar los hijos por el campo que yo desee.
dejo tambien el codigo de la funcion

Gracias

Código:
CREATE OR REPLACE FUNCTION get_arbol_secciones_back
RETURN secciones_back_type_table PIPELINED AS
v_MyType secciones_back_type;
BEGIN
FOR recMenu IN (
SELECT s.id_seccion AS id_seccion,
	   ordenS,
       LPAD ('-', (s.nivel - 1) * 1, '-') || s.nombre AS nombrearbol,
       s.fk_id_modulo AS fk_id_modulo,
       CASE (s.habilitado)
          WHEN '1'
             THEN 'Si'
          ELSE 'No'
       END AS habilitado
  FROM (SELECT     s1.*, itf.orden as ordenS, LEVEL AS nivel
              FROM secciones s1 LEFT JOIN items_front itf
                   ON itf.fk_id_seccion = s1.id_seccion
             WHERE s1.borrado = '0'
        CONNECT BY PRIOR s1.id_seccion = s1.fk_id_seccion
        START WITH s1.fk_id_seccion IS NULL
          ORDER SIBLINGS BY ordenS) s

   ) LOOP
v_MyType := secciones_back_type(recMenu.id_seccion, recMenu.nombrearbol, recMenu.fk_id_modulo, recMenu.habilitado);
PIPE ROW(v_MyType);
END LOOP;
RETURN;
END get_arbol_secciones_back;