Usando plsq

Post on 18-Feb-2017

227 views 1 download

Transcript of Usando plsq

Programando PL/SQL en APEX

Daniel Bozzolo UYOUG

daniel.bozzolo@logos.com.uy

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????