jueves, 13 de junio de 2013

Ejemplo de XMLQUERY con subprogramas

CREATE OR REPLACE procedure p_xmlfromquery (     --se crea el procedimiento
                        lv_query varchar,                                            --se crean los parametros
                        LV_DATAFORMA VARCHAR2,                                                              
                        tag_padre varchar2,
                        tag_linea varchar2,
                        resultado out varchar2,
                        gn_registros out number,
                        pn_cod_error out number,
                        pv_error out varchar2) IS
                       
ctx  dbms_xmlquery.ctxHandle;                   --se crea la variable de contexto ctxHandle

BEGIN                                                                      --se inicia el bloque

  --instanciar o iniciar una clase
  ctx := dbms_xmlquery.newContext(lv_query);                                              
--a la variable contexto se le asigna el nuevo contexto(variable de la query)
 if LV_DATAFORMA is not null then                                                                      
--se inicia un ciclo if donde la variable forma no es nula entonces
 DBMS_XMLQUERY.SETDATEFORMAT(CTX,LV_DATAFORMA);                            
--se setea el formato de fecha(contexto, variable data forma)
 end if;                                                     --fin del if
  --setearle valores para definir su comportamiento
 if tag_padre is not null then                      
--se inicia un ciclo if donde la variable de etiqueta padre no es nula entonces
 DBMS_XMLquery.SETROWSETTAG(ctx,tag_padre);                                          
-- se setea la fila y se setea la etiqueta(contexto, tag_padre)
  end if;                                           --fin del if

  if tag_linea is not null then              
--se inicia un ciclo if donde la variable de etiqueta hija no es nula entonces                                     

DBMS_XMLQUERY.SETROWTAG  (ctx,tag_linea);                                             
-- se setea la fila y se setea la etiqueta(contexto, tag_hija)
  end if;                                                    --fin del if

  resultado:=DBMS_XMLQUERY.GETXML(ctx);                                                    
--la variable resultado es el obtiene el xml
 gn_registros:=DBMS_XMLQUERY.GETNUMROWSPROCESSED(ctx);                    
--la variable registros cuenta el numero de celdas procesadas
 -- cerrar o destruir la clase 
  DBMS_XMLQUERY.CLOSECONTEXT(ctx);                                                         
--se cierra o destruye el contexto
exception when  others then                                                                               
--manejo de excepciones
 pn_cod_error:=SQLERRM;                                       --ver el codigo de error
end;                                                                       --fin del bloque
end;                                                                       --fin del procediemiento

No hay comentarios:

Publicar un comentario