2. Cursores:
Es una estructura interna de información. Esta
estructura puede ser accedida a través de PL/SQL y él
mismo maneja la estructura, de manera tal que
codificando un PL podamos hacer uso de la
información contenida en el cursor.
Para esta sesión usted debe de contar con el Script:
Script_curso_PLSQL_Basico_m4_01.sql
De este Script tome el PL anónimo: “Cursores”, cópielo,
analícelo con el instructor y ejecútelo.
3. --Pl/SQl anónimo: Cursores
--Curso:
PL/SQL Básico
--Script:
Script_curso_PLSQL_Basico_m3_01
--Objetivo:
Instruir a los participantes del curso en el uso de cursores como estructura de datos interactivo.
--Autor:
Byron Quisquinay
--Fecha Elaboración: 17/12/2013
--Versión del script: 01
declare
cursor clientes is
select clientes.id_cliente,
clientes.nombres,
clientes.apellidos,
clientes.nit,
clientes.dpi
from tbl_cliente_telco clientes;
begin
for ciclo_clientes in clientes loop
begin
dbms_output.put_line('Id Cliente '||ciclo_clientes.id_cliente||' Nombre: '||ciclo_clientes.nombres||'
Apellidos: '||ciclo_clientes.apellidos||' Número de NIT: '||ciclo_clientes.nit||' DPI número: '||ciclo_clientes.dpi);
end;
end loop; --Ciclo_clientes
end;
4. Siguiendo con cursores
Al programar no existe una sola forma de solucionar
un problema, tome de su script el PL anónimo:
“Cursores 2”, cópielo, páselo a su herramienta para
ejecución de SQL y PL/SQL, analícelo con el
instructor, resuelva sus dudas, ejecútelo.
5. --Pl/SQl anónimo: Cursores 2
--Curso:
PL/SQL Básico
--Script:
Script_curso_PLSQL_Basico_m3_01
--Objetivo:
Instruir a los participantes del curso en el uso de cursores como estructura de datos
interactivo embebido en el LOOP FOR.
--Autor:
Byron Quisquinay
--Fecha Elaboración: 17/12/2013
--Versión del script: 01
declare
begin
for ciclo_clientes in (select clientes.id_cliente,
clientes.nombres,
clientes.apellidos,
clientes.nit,
clientes.dpi
from tbl_cliente_telco clientes) loop
begin
dbms_output.put_line('Id Cliente '||ciclo_clientes.id_cliente||' Nombre:
'||ciclo_clientes.nombres||' Apellidos: '||ciclo_clientes.apellidos||' Número de NIT:
'||ciclo_clientes.nit||' DPI número: '||ciclo_clientes.dpi);
end;
end loop; --Ciclo_clientes
end;
6. Cursores Implícitos y Explícitos
¿Puede usted indicar la diferencia, basado en lo que ha
visto al momento?
7. Ejercitándonos un poco…
Cree un PL en donde exista un cursor basado en la
información de la tabla tbl_precio_articulo , imprima
los datos de esta tabla.
8. Cursores y ciclos aplicados…
En su Script del módulo 4 usted posee el PL anónimo:
“Cursores y ciclos aplicado a un problema”, cópielo a su
herramienta, analícelo con el instructor, ejecútelo.
9. --Pl/SQl anónimo: Cursores y ciclos aplicado a un problema
--Curso:
PL/SQL Básico
--Script:
Script_curso_PLSQL_Basico_m3_01
--Objetivo:
Instruir a los participantes del curso en el uso de cursores como estructura de datos interactivo embebido en el LOOP FOR.
--Autor:
Byron Quisquinay
--Fecha Elaboración: 17/12/2013
--Versión del script: 01
declare
-- Area de Cursores
cursor detalle_factura is
select det_fact.factura_id,
det_fact.articulo_id,
det_fact.cantidad_articulo,
det_fact.total_articulo
from tbl_detalle_factura det_fact;
--Declaración de variables, en este PL vl_ significa variable local.
vl_precio_articulo tbl_precio_articulo.precio_articulo%type;
begin
for ciclo_det_fact in detalle_factura loop
begin
--Se buscará el precio del artículo que figura en el detalle de factura para el cálculo del total por artículo.
begin
select nvl(articulo.precio_articulo,0) precio_articulo
into vl_precio_articulo
from tbl_precio_articulo articulo
where articulo_id = ciclo_det_fact.articulo_id;
exception
when no_data_found then
raise_application_error(-20000,'M4C01- No hay datos para el artículo con id: '||ciclo_det_fact.articulo_id||sqlcode||' - '||sqlerrm);
end;
--Se valida si hay un precio distinto de cero para no afectar la información.
if (vl_precio_articulo != 0) then
begin
update tbl_detalle_factura det_fact
set det_fact.total_articulo = ciclo_det_fact.cantidad_articulo * vl_precio_articulo
where det_fact.factura_id = ciclo_det_fact.factura_id
and det_fact.articulo_id = ciclo_det_fact.articulo_id;
end;
end if; --Se valida si hay un precio distinto de cero para no afectar la información.
end;
end loop; --ciclo_det_fact
--Se aseguran los cambios.
commit;
end;
10. Ejercitándonos un poco…
Actualice el precio del producto de 19.99 a 30.
Ejecute nuevamente el PL anónimo: “Cursores y ciclos
aplicado a un problema”.
Realice un query sobre del detalle de factura, vea los
cambios.
Comente sus observaciones, comentarios e
inquietudes.
11. Tarea del Módulo 4
En su archivo de Script para este módulo usted tiene
a su disposición sentencias para crear una tabla para
el detalle de IVA, entonces, construya un PL anónimo
que:
1.
1.
2.
3.
Tenga un cursor del detalle de factura.
Declare una constante con el valor del IVA.
Inserte datos en la tabla de detalle de IVA.
12. Scripts Globales 01 y 02
1.
Usted cuenta con archivos de Script:
“Script_curso_PLSQL_Basico_Global_01(02).sql”,
analice y ejecute ambos scripts para contar con las
estructuras e información que necesitará para las
tareas que a continuación se le asignarán.
13. Tareas [2..4]
[2] Cree un Pl anónimo que actualice el Total Facturado de
la tabla: tbl_maestra_facturas. Se requiere:
Cursor de facturas.
Actualización de campo Total Facturado = Total Cargos –
Total Descuento.
[3] Cree un Pl anónimo para que inserte las facturas con sus
datos necesarios en Cuenta Corriente. Para ello se requiere:
Cursor de facturas.
Inserción en Cuenta corriente.
[4] Cree un Pl anónimo que por factura busque los pagos y
actualice la cuenta corriente.
14. Tabla de Valoración para la tarea
Elemento Entregado
Puenteo
PL anónimo 1
5
PL anónimo 2
30
PL anónimo 3
30
PL anónimo 4
35