2. 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
3. APEX es una herramienta RAD
Desarrollo rápido
o
Desarrollo apurado ?
• Varios lugares donde escribir código
PL/SQL dentro de APEX
4. 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)
5. Características
Podemos definir el PL/SQL como un
conjunto de sentencias que se
agrupan en bloques
• Bloques Anónimos
• Bloques Nominados
6. Bloques Anónimos
Tienen una estructura predefinida
DECLARE
--- declaración de variables, cursores
BEGIN
sentencias;
EXCEPTION
WHEN others THEN
-- manejo de errores;
END;
8. 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
10. 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
11. Dónde se escribe PL/SQL en
APEX?
El proceso estandar de Insert
Update Delete
12. Dónde se escribe PL/SQL en
APEX?
El proceso estandar de Insert Update
Delete – puede ser reemplazado
13. Dónde se escribe PL/SQL en
APEX?
El proceso estandar de Insert Update
Delete – puede ser reemplazado
14. Dónde se escribe PL/SQL en
APEX?
El proceso estandar de Insert Update
Delete – puede ser reemplazado
15. Dónde se escribe PL/SQL en APEX?
El proceso estandar de Insert Update
Delete – puede ser reemplazado
16. Dónde se escribe PL/SQL en
APEX?
El proceso estandar de Insert Update
Delete – puede ser reemplazado
21. 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
28. 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
29. 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
30. 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
31. 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
32. 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
35. 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')
37. 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');
38. 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
39. 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