Usando plsq

40
Programando PL/SQL en APEX Daniel Bozzolo UYOUG [email protected]

Transcript of Usando plsq

Page 1: Usando plsq

Programando PL/SQL en APEX

Daniel Bozzolo UYOUG

[email protected]

Page 2: Usando plsq

Sobre mi

Miembro del Grupo de Usuarios Uruguay

Socio de Logos Consulting SRL 20+ años de experiencia en

herramientas Oracle, SQL, PL/SQL Forms y Reports

7+ de experiencia en APEX 12+ Consultor Técnico Oracle eBS

Page 3: Usando plsq

APEX es una herramienta RAD

Desarrollo rápido o Desarrollo apurado ?

• Varios lugares donde escribir código PL/SQL dentro de APEX

Page 4: Usando plsq

Qué es PL/SQL?

Es un lenguaje propietario de Oracle Se puede escribir en clientes y en

el servidor (Ejemplos: Forms, Reports, APEX,

paquetes almacenados en la Base de Datos)

Page 5: Usando plsq

Características

Podemos definir el PL/SQL como un conjunto de sentencias que se agrupan en bloques

• Bloques Anónimos • Bloques Nominados

Page 6: Usando plsq

Bloques Anónimos Tienen una estructura predefinida DECLARE --- declaración de variables, cursores BEGIN sentencias; EXCEPTION WHEN others THEN -- manejo de errores; END;

Page 7: Usando plsq

Bloques Nominados

Paquetes • Funciones • Procedimientos

Funciones Procedimientos

Page 8: Usando plsq

Bloques Nominados vs Anónimos

Nominados • Son reutilizables • Están compilados • Sus objetos validados • En general van del lado de la Base de Datos

Anónimos • Pueden tener errores de validación • Útiles cuando interactúan con la UI

Page 9: Usando plsq

Dónde se escribe PL/SQL en APEX?

APPLICATION PROCESS

Page 10: Usando plsq

Dónde se escribe PL/SQL en APEX?

APPLICATION PROCESS

•Se escribe código plsql para ser ejecutado por ejemplo ON-DEMAND •Ejecutar plsql para modificar datos en la página sin necesidad de un submit

Page 11: Usando plsq

Dónde se escribe PL/SQL en APEX?

El proceso estandar de Insert Update Delete

Page 12: Usando plsq

Dónde se escribe PL/SQL en APEX?

El proceso estandar de Insert Update Delete – puede ser reemplazado

Page 13: Usando plsq

Dónde se escribe PL/SQL en APEX?

El proceso estandar de Insert Update Delete – puede ser reemplazado

Page 14: Usando plsq

Dónde se escribe PL/SQL en APEX?

El proceso estandar de Insert Update Delete – puede ser reemplazado

Page 15: Usando plsq

Dónde se escribe PL/SQL en APEX? El proceso estandar de Insert Update

Delete – puede ser reemplazado

Page 16: Usando plsq

Dónde se escribe PL/SQL en APEX?

El proceso estandar de Insert Update Delete – puede ser reemplazado

Page 17: Usando plsq

Dónde se escribe PL/SQL en APEX?

Reportes

Page 18: Usando plsq

Dónde se escribe PL/SQL en APEX?

PAGE PROCESS

Page 19: Usando plsq

Dónde se escribe PL/SQL en APEX?

VALIDATIONS

Page 20: Usando plsq

Dónde se escribe PL/SQL en APEX?

Dynamic Actions

Page 21: Usando plsq

Como escribimos el código PL/SQL

Siempre escribir un bloque PL/SQL anónimo, aún cuando llamemos funciones o procedimientos de la BD

Si se trata de operaciones sobre la BD crear paquetes y funciones o procedimientos

Utilizar editores de PL para escribir el código y pegarlo donde corresponda en APEX

Page 22: Usando plsq

Qué herramienta utilizamos para programar PL/SQL ?

PLSQL Developer

TOAD

SQL Developer

Otros

Page 23: Usando plsq

Cuál utilizar para APEX ?

Page 24: Usando plsq

SQL Developer y APEX

Es gratuita Es de Oracle Tiene una entrada específica para

APEX Permite el deploy en la nube de

Oracle

Page 25: Usando plsq

SQL Developer y APEX

Page 26: Usando plsq

SQL Developer y APEX

Page 27: Usando plsq

ACCIONES CON SQLDEVELOPER

Cambiar Páginas Exportar Refactor

Page 28: Usando plsq

Nested Tables – Varrays - Arrays

Almacenamiento de un número variable de items en una estructura temporal

Persisten en la sesión Las páginas en APEX pueden tener

múltiples sesiones Tampoco se pueden utilizar tablas

temporales SOLUCION

Page 29: Usando plsq

COLLECTIONS

Almacenamiento de un número variable de items en una estructura temporal

Persisten en la sesión de usuario No es necesario administrar los

estados de la sesión Son almacenadas en tablas Están asociadas con la sesión del

usuario logueado a la aplicación

Page 30: Usando plsq

Administración del Estado de la Sesión

Similarmente APEX Collections permite compartir datos entre sus páginas sin necesidad de chequear cookies.

APEX Collections pueden ser vistas como tablas que proveen en forma automática estados de sesión

Page 31: Usando plsq

Administración del Estado de la Sesión

La mayor cantidad de arquitecturas de aplicaciones web son stateless • No retienen la información en

subsecuentes ejecuciones Oracle APEX provee un mecanisno

para retener la información mediante session Cookie almacenadas en el browser del usuario

Page 32: Usando plsq

APEX Collections

Almacenadas en 2 Tablas • WWV_FLOW_COLLECTIONS$

Información relativa a la sesión • WWV_FLOW_COLLECTION_MEMBERS$

Almacena los datos propiamente dichos A Partir de la versión 4 soporta

• Varchar2 • BLOBs • CLOBs • XMLTYPEs • Numbers • Dates

Page 33: Usando plsq

APEX Collections

Los datos están identificados por • COLLECTION_NAME • SEQ_ID

Page 34: Usando plsq

Operaciones con APEX Collections

Inicialización • apex_collection.CREATE_COLLECTION_F

ROM_QUERY(p_collection_name => ‘COMPRAS’, P_QUERY =>’’)

• apex_collection.CREATE_COLLECTION_FROM_QUERY_B(p_collection_name => ‘COMPRAS’, P_QUERY =>’’)

• apex_collection.CREATE_OR_TRUNCATE_COLLECTION(p_collection_name => ‘COMPRAS’)

Page 35: Usando plsq

Operaciones con APEX Collections

Inicialización • El nombre de la collection debe ser

único • Se puede controlar su existencia • apex_collection.collection_exists(P_COL

LECTION_NAME => 'VENTAS')

Page 36: Usando plsq

Operaciones con APEX Collections Agregar, modificar o eliminar datos

• apex_collection.add_member(p_collection_name => 'VENTAS‘, p1_c001 =>…..)

• apex_collection.delete_member(p_collection_name => 'VENTAS', p_seq => APEX_APPLICATION.G_F15(k));

• apex_collection.update_member_attribute(p_collection_name => 'VENTAS‘, p_seq => v_id,p_attr_number => 1, p_attr_value => APEX_APPLICATION.G_F01(i));

Page 37: Usando plsq

Operaciones con APEX Collections

Resecuenciación • Cuando borramos algún elemento es

buena práctica realizar una resecuenciación de la Collection apex_collection.resequence_collection(p_coll

ection_name => 'VENTAS');

Page 38: Usando plsq

Mapping de APEX Collections con un Reporte

Si creamos un reporte modificable basado en SQL

SELECT c001 "Cod. Barras",c002 "Cod. Producto", c003 "Descripción", c004 "Cantidad", c005 "Precio S/IVA", c006 "Dto", c007 "Precio C/IVA",

c008 "Precio Total", c009 "Accion", apex_item.display_and_save(16, lpad(seq_id,2,'0')) seq_id, c011 "Id Linea", c012 "iva", c013 "Dto Manual", c014 "Cod Imp", c016 "Receta", apex_item.checkbox(15,seq_id,DECODE(c015, 'S','CHECKED', NULL)) "Borrar"

FROM apex_collections WHERE collection_name='VENTAS‘ ORDER BY seq_id

Page 39: Usando plsq

Mapping de APEX Collections con un Reporte

El mapping de columnas estará dado por el array APEX_APPLICATION

• G_F01 • G_F02 • G_F03 • ……. • G_Fnn

Page 40: Usando plsq

PREGUNTAS????