miércoles, 22 de febrero de 2012

OBTENER DATOS DE XML STRING

En esta oportunidad detalle la forma de cómo obtener datos de un XML incrustado en una CADENA. Esto nos sera de gran utilidad cuando se nos envie como INPUT una parametro de tipo XML independientemente del formato XML que maneje. Para ellos nos apoyaremos en la realizacion de los DUMMYS de los objetos ORACLE: XMLTYPE, XMLSEQUENCE, EXTRACTVALUE.

I. OBTENER DATOS FROM [XML STRING] #1:
II. OBR DATOS FROM [XML STRING] #2: El contenido de este QUERY podría ya ser cargado en un CURSOR.
III. OBTENER DATOS FROM [XML STRING] #3: El contenido de este QUERY podría ya ser cargado en un CURSOR.

Para un mayor detalle de los comando SQL utilizados, descargar el TUTORIAL pulsando Aquí

ARMAR XML EN BASE A DATOS DE TABLA

En esta oportunidad detalle la forma para el armado de XML en base a los datos propios de una tabla de datos. Para ellos nos apoyaremos en la realizacion de los DUMMYS de los objetos ORACLE: XMLSEQUENCE, XMLFOREST, XMLELEMENT.

1. CREAR TABLA BASE.
2. ARMAR UN XML EN BASE A DATOS DE TABLA: [EJEMPLO #1].
3. ARMAR UN XML EN BASE A DATOS DE TABLA: [EJEMPLO #2].
4. ARMAR UN XML EN BASE A DATOS DE TABLA: [EJEMPLO #3].

Para un mayor detalle de los comando SQL utilizados, descargar el TUTORIAL pulsando Aquí

CLIENTE WEB SERVICE EN ORACLE

El siguiente tutorial muestra el manejo del paquete UTL_HTTP de ORACLE. Dicho paquete UTL_HTTP hace Hypertext Transfer Protocol (HTTP) llamadas de SQL y PL/SQL. Se puede usar para acceder a datos en Internet a través de HTTP.

Con UTL_HTTP, puede escribir programas PL/SQL que se comunican con Web (HTTP) entre servidores. UTL_HTTP también contiene una función que se puede utilizar en las consultas SQL. El paquete también es compatible con HTTP a través del protocolo de Secured Socket Layer (SSL), también conocido como HTTPS, directamente o a través de un proxy HTTP (cliente WS).

El demo propuesto se mostrara una SOLUCION basada en PL/SQL para el consumo a modo cliente de Web Service. Para el ejemplo nos apoyaremos en un Servicio Web ya creado en JAVA y desplegado al cual nos conectaremos para el consumo respectivo de dichos servicios.

El WebService de apoyo se puede descargar desde: Aquí

Ademas, la SOLUCION preparada consta de dos ORACLE PACKAGE. El Dummy mostrara las diferentes formas de consumir un Servicio Web en estos ESCENARIOS:

ESCENARIO #1: [DUMMY #1]
- INPUT: Dos parámetros primitivos (Int, String).
- OUTPUT: Una CADENA con los datos del usuario concatenados.

ESCENARIO #2: [DUMMY #2]
- INPUT: Dos parámetros primitivos ( Int, String ).
- OUTPUT: Un objeto ORACLE TYPE RECORD usuario con los datos del usuario filtrado.

ESCENARIO #3: [DUMMY #3]
- INPUT: Un objeto ORACLE TYPE RECORD para usuario con los datos del filtro.
- OUTPUT: Un objeto ORACLE TYPE RECORD para obtener al usuario con los datos ya filtrado.

ESCENARIO #4: [DUMMY #4]
- INPUT: Dos parámetros primitivos ( Int, String ).
- OUTPUT: Un objeto ORACLE CURSOS con los datos de los usuarios encontrados.

ESCENARIO #5: [DUMMY #5]
- INPUT: Dos parámetros primitivos ( Int, String ).
- OUTPUT: Un objeto ORACLE TABLE OF RECORD con los datos de los usuarios encontrados.

Para un mayor detalle de los comando SQL utilizados, descargar el TUTORIAL pulsando Aquí

sábado, 18 de febrero de 2012

MANEJO ORACLE JOBs

Hola en esta oportunidad mostrare un TUTORIAL que he desarrollado para la explicacion a detalle del manejo de JOBs en ORACLE.

Los JOBs en ORACLE son utilizados cuando se tiene la necesidad de automatizar procesos de forma periodica. ORACLE nos brinda esa facilidad mediante su paquete: "DBMS_SCHEDULER".

Ustedes diran pero lo puedo controlar mediante un UNIX/LINUX CRON, es correcto tambien se podria hacer, pero mediante ORACLE JOB seria de una forma mas directa por ejemplo para la ejecucion de un PROCEDURE periodicamente que desencadenate un flujo completo de procesos.

El TUTORIAL muestra paso a paso la creacion del PERMISO todo lo requerido para el manejo completo de JOB en ORACLE propiamente. Resumiendo el TUTORIAL contiene:

I. CREACION [TABLE].
II. CREACION [PROCEDURE].
III. CREACION [JOB].
1. CREACION DE OBJETO: [PROGRAM].
2. CREACION DE OBJETO: [SCHEDULE].
3. CREACION DE OBJETO: [JOB].
IV. INICIAR & DETENER [JOB].
IV. CONSULTAR ESTADO & EXISTENCIA DE JOB.

Para un mayor detalle de los comando SQL utilizados, descargar el TUTORIAL pulsando Aquí

MANEJO ORACLE DIRECTORY

Hola en esta oportunidad mostrare un Tutorial que he desarrollado para la explicacion a detalle del manejo de DIRECTORY en ORACLE.

ORACLE DIRECTORY: Para el manejo nos apoyaremos en el package "UTL_FILE" propio de ORACLE, el cual nos facilita el poder acceder y manipular archivos desde un PROCEDURE en ruta especifica.

El TUTORIAL muestra paso a paso la creacion del PERMISO requerido, la creacion de los PROCEDURE y del objeto DIRECTORY propiamente. Resumiendo:

I. EJECUTAR PERMISOS:
II. CREACION DIRECTORY:
III. CONSULTAR DIRECTORY:
IV. CREACION DE PROCEDURE:
A. ESCRITURA.
B. LECTURA.
V. PRUEBA DE PROCEDURE.

Para un mayor detalle de los comando SQL utilizados, descargar el TUTORIAL pulsando Aquí

domingo, 2 de enero de 2011

MANEJO DE AGRUPACIONES & ACUMULACIONES

A continuación mostrare varios ejemplos para el manejo de AGRUPACIONES & ACUMULACIONES usando diferentes sentencias SQL (algunas no muy conocidas). El ejemplo fue desarrollado utilizando:

- Plataforma Windows XP
- Motor ORACLE 10G.
- IDE: PL-SQL Developer v8.0.

El ejemplo muestra un comparativo de diferentes casuísticas que uno puede ir obteniendo al combinar sentencias SQL como: COUNT, SUM, GROUP BY, GROUP BY ROLLUP, GROUP BY CUBE, GROUP BY GROUPING SETS, RANK, GROUPING, ORDER BY, ETC.

Los QUERYS a realizar muestran los siguientes resultados:

1. MUESTRA CONTENIDO TOTAL DE TABLA.
2. MUESTRA CONTENIDO TOTAL DE TABLA:
3. AGRUPACION DE [PRODUCTO ID] Y ACUMULACION DE: [ELEMENTOS] & [VENTAS].
4. ROLLUP: PARA OBTENER AGRUPACIONES DE: [AÑO] + [PRODUCTO ID], PARA CADA [AÑO] LA ACUMULACION DE SUS [ELEMENTOS] & [VENTAS]Y AL FINAL AGREGA UNA FILA NULL CON EL ACUMULADO EL 'TOTAL' DE [ELEMENTOS] & [VENTAS]. SE COMPLETAN CON NULL LAS COLUMNAS QUE NO SE ESTA CONVINANDO.
5. CUBE: PARA OBTENER AGRUPACIONES DE: [AÑO] & [PRODUCTO ID],PARA CADA [AÑO] LA ACUMULACION DE SUS [ELEMENTOS] & [VENTAS]. TAMBIEN, PARA CADA [PRODUCTO ID]] LA ACUMULACION DE SUS [ELEMENTOS] & [VENTAS], Y AL FINAL AGREGA UNA FILA NULL CON EL ACUMULADO EL 'TOTAL' DE [ELEMENTOS] & [VENTAS]. SE COMPLETAN CON NULL LAS COLUMNAS QUE NO SE ESTA CONVINANDO.
6. GROUPING SETS: PARA OBTENER 'VARIAS AGRUPACIONES' SIMULTANEAS DE: [D.YEAR & TIPO DE PRODUCTO ID & EMPLEADO ID], PARA OBTENER ACUMULACIONES DE 'ELEMENTOS' Y 'VENTAS'. SE COMPLETAN CON NULL LAS COLUMNAS QUE NO SE ESTA CONVINANDO.
7. GROUPING SETS: PARA OBTENER 'VARIAS AGRUPACIONES' SIMULTANEAS DE: [D.YEAR & (TIPO DE PRODUCTO ID + EMPLEADO ID)], PARA OBTENER ACUMULACIONES DE 'ELEMENTOS' Y 'VENTAS'. SE COMPLETAN CON NULL LAS COLUMNAS QUE NO SE ESTA CONVINANDO.
8. ROLLUP AND RANK(): PARA OBTENER LA COLUMNA 'RANKING' DE [VENTAS] EN BASE AL AGRUPAMIENTO DE [PRODUCT ID] PARA OBTENER LA ACUMULACION DE: [ELEMENTOS & VENTAS].
9. ROLLUP AND RANK(): PARA OBTENER LA COLUMNA 'RANKING' DE [VENTAS] EN BASE AL AGRUPAMIENTO DE [EMPLEADO ID] PARA OBTENER LA ACUMULACION DE: [ELEMENTOS & VENTAS].
10. GROUPING: PARA OBTENER LA COLUMNA 'RANKING' DE [VENTAS] EN BASE AL AGRUPAMIENTO DE [AÑO] PARA OBTENER LA ACUMULACION DE: [MESES & ELEMENTOS & VENTAS]. AGREGA UNA COLUMNA ADICIONAL DONDE SE VALIDA LA EXISTENCIA DE NULL, EN BASE A LA FILA CON NULL:
- GROUPING = 0 [SI ES 'NULL'].
- GROUPING = 1 [SI NO ES 'NULL'].

Para un mayor detalle de los comando SQL utilizados, descargar el TUTORIAL pulsando Aquí

EVALUANDO PERFORMANCE ENTRE SENTENCIAS: FOR & FORALL

En esta oportunidad mostrare como evaluar la performance de una sentencia repetitiva muy utilizada que es FOR ante otra no muy conocida que es FORALL.

Los pasos a realizar son los siguientes:

I.- CREAR TABLAS:
II.- CREAR PROCEDURE:
III.- EJECUTAR PROCEDURE:
IV.- VERIFICAR RESULTADO OBTENIDO [CONSOLA]:

Finalmente, el resultado obtenido será el siguiente:

EVALUACION DE PERFORMANCE [TIEMPO]
----------------------------------
- REGISTRO USANDO [FOR LOOP]: 0.62 [SEG].
- REGISTRO USANDO [FORALL]: 0.03 [SEG].


La evaluación será en base a un PROCEDURE que realizara un INSERT simple en dos tablas ( Una en base a la iteración con el FOR y la otra con el FOR ALL ). Para la ejecución de dicho PROCEDURE se utilizara un DECLARE que solicitara la iteración para el registro de 20000 datos.

Para un mayor detalle de los comando SQL utilizados, descargar el TUTORIAL pulsando Aquí