usando plsq
TRANSCRIPT
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
APEX es una herramienta RAD
Desarrollo rápido o Desarrollo apurado ?
• Varios lugares donde escribir código PL/SQL dentro de APEX
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)
Características
Podemos definir el PL/SQL como un conjunto de sentencias que se agrupan en bloques
• Bloques Anónimos • Bloques Nominados
Bloques Anónimos Tienen una estructura predefinida DECLARE --- declaración de variables, cursores BEGIN sentencias; EXCEPTION WHEN others THEN -- manejo de errores; END;
Bloques Nominados
Paquetes • Funciones • Procedimientos
Funciones Procedimientos
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
Dónde se escribe PL/SQL en APEX?
APPLICATION PROCESS
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
Dónde se escribe PL/SQL en APEX?
El proceso estandar de Insert Update Delete
Dónde se escribe PL/SQL en APEX?
El proceso estandar de Insert Update Delete – puede ser reemplazado
Dónde se escribe PL/SQL en APEX?
El proceso estandar de Insert Update Delete – puede ser reemplazado
Dónde se escribe PL/SQL en APEX?
El proceso estandar de Insert Update Delete – puede ser reemplazado
Dónde se escribe PL/SQL en APEX? El proceso estandar de Insert Update
Delete – puede ser reemplazado
Dónde se escribe PL/SQL en APEX?
El proceso estandar de Insert Update Delete – puede ser reemplazado
Dónde se escribe PL/SQL en APEX?
Reportes
Dónde se escribe PL/SQL en APEX?
PAGE PROCESS
Dónde se escribe PL/SQL en APEX?
VALIDATIONS
Dónde se escribe PL/SQL en APEX?
Dynamic Actions
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
Qué herramienta utilizamos para programar PL/SQL ?
PLSQL Developer
TOAD
SQL Developer
Otros
Cuál utilizar para APEX ?
SQL Developer y APEX
Es gratuita Es de Oracle Tiene una entrada específica para
APEX Permite el deploy en la nube de
Oracle
SQL Developer y APEX
SQL Developer y APEX
ACCIONES CON SQLDEVELOPER
Cambiar Páginas Exportar Refactor
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
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
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
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
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
APEX Collections
Los datos están identificados por • COLLECTION_NAME • SEQ_ID
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’)
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')
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));
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');
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
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
PREGUNTAS????