2. %type
Con el atributo %type usted asigna a una variable el
tipo de una columna perteneciente a una tabla
existente en la Base de Datos.
Es decir que usted no necesita definir los tipos de datos
para variables que recibirán el valor almacenado en un
campo.
El uso de este atributo es una buena práctica dada la
posibilidad de que en determinado momento el tipo,
ancho y precisión de un campo de tabla puede variar.
3. Explorando %type
Usted debe contar con el Script:
Script_curso_PLSQL_Basico_m2_01.sql.
Entonces encontrará el PL anónimo:
--Pl/SQl anónimo: Uso de %type
Cópielo a su herramienta, analicemos su construcción
y funcionamiento.
Ejecútelo
4. --Pl/SQl anónimo: Uso de %type
--Curso:
PL/SQL Básico
--Script:
Script_curso_PLSQL_Basico_m2_01
--Objetivo:
Instruir a los participantes del curso en el uso de PL/SQL para el empleo de %type, exception e if.
--Autor:
Byron Quisquinay
--Fecha Elaboración: 12/12/2013
--Versión del script: 01
declare
v_articulo_id tbl_precio_articulo.articulo_id%type;
v_factura_id tbl_detalle_factura.factura_id%type;
v_precio_articulo tbl_precio_articulo.precio_articulo%type;
begin
--Buscaremos el artículo (mayor) del detalle de factura
begin
select max(DetFact.articulo_id)
into v_articulo_id
from tbl_detalle_factura DetFact;
exception
when no_data_found then
v_articulo_id := 0;
end;
--Si se encontró una artículo facturado se buscará el detalle.
if (v_articulo_id != 0) then
begin
select PrecArt.precio_articulo
into v_precio_articulo
from tbl_precio_articulo PrecArt
where PrecArt.articulo_id = v_articulo_id;
end;
begin
select DetFact.factura_id
into v_factura_id
from tbl_detalle_factura DetFact
where articulo_id = v_articulo_id;
end;
begin
update tbl_detalle_factura DetFact
set DetFact.total_articulo = nvl(DetFact.cantidad_articulo,0) * nvl(v_precio_articulo,0)
where DetFact.factura_id = v_factura_id;
end;
end if;
commit;
end;
5. Se puede mejorar…
Ahora en su archivo de Script para el Módulo 2 busque
el PL anónimo:
--Pl/SQl anónimo: Uso de %type mejorado
¿Qué nota en esta otra versión?
6. declare
v_articulo_id tbl_precio_articulo.articulo_id%type;
v_factura_id
tbl_detalle_factura.factura_id%type;
v_precio_articulo tbl_precio_articulo.precio_articulo%type;
begin
--Buscaremos el artículo (mayor) del detalle de factura
begin
select max(DetFact.articulo_id)
into v_articulo_id
from tbl_detalle_factura DetFact;
exception
when no_data_found then
v_articulo_id := 0;
end;
--Si se encontró una artículo facturado se buscará el detalle.
if (v_articulo_id != 0) then
begin
select nvl(PrecArt.precio_articulo, 0) precio_articulo
into v_precio_articulo
from tbl_precio_articulo PrecArt
where PrecArt.articulo_id = v_articulo_id;
exception
when no_data_found then
v_precio_articulo := 0;
end;
--Si se encontró un precio distinto de cero busque la actura a la que está asociado
if (v_precio_articulo != 0) then
begin
select DetFact.factura_id
into v_factura_id
from tbl_detalle_factura DetFact
where articulo_id = v_articulo_id;
exception
when no_data_found then
v_factura_id := null;
end;
--Si hay factura para actualizar entonces realice la actualización en base al precio del artículo
if (v_factura_id is not null) then
begin
update tbl_detalle_factura DetFact
set DetFact.total_articulo = nvl(DetFact.cantidad_articulo,0) * nvl(v_precio_articulo,0)
where DetFact.factura_id = v_factura_id;
end;
end if; --Si hay factura para actualizar entonces realice la actualización en base al precio del artículo
end if;--Si se encontró un precio distinto de cero busque la factura a la que está asociado
end if; --Si se encontró una artículo facturado se buscará el detalle.
commit;
end;
7. Practicando un poco
Construya un PL para:
Insertar un artículo en tbl_precio_articulo. Recuerde que estas
sentencias ya las posee en el Script del Módulo 1, no se desgaste
escribiéndolas de nueva cuenta. Este artículo tendrá un precio de
100.25.
También deberá insertar un detalle de factura para este artículo, con
1 unidad facturada, del nuevo artículo que recién usted ha
insertado.
¿Funcionaría el PL anónimo: “--Pl/SQl anónimo: Uso de
%type mejorado”, para actualizar “tbl_detalle_factura.
total_articulo”?
Si cree que es afirmativa la respuesta la pregunta anterior, ejecute
el Script, de caso contrario modifique el PL anónimo para que
pueda actualizar el Total de Artículo para la nueva línea en
“tbl_detalle_factura”.
8. Constantes
Al declarar CONSTANT usted define un elemento
que no puede variar su valor.
Del script del Módulo 2 tome el PL anónimo:
--Pl/SQl anónimo:
Analice el PL.
Ejecútelo.
Realizando cálculos empleando constantes
9. --Pl/SQl anónimo: Realizando cálculos empleando constantes
--Curso:
PL/SQL Básico
--Script:
Script_curso_PLSQL_Basico_m2_01
--Objetivo:
Instruir a los participantes del curso en el uso de PL/SQL para el empleo de
operaciones matemáticas.
--Autor:
Byron Quisquinay
--Fecha Elaboración: 12/12/2013
--Versión del script: 01
declare
c_impuesto
constant number(1) :=5; --Constante del impuesto para el pequeño contribuyente.
v_valor_facturado number(18,2)
:=3000; --Variable que tendrá el valor facturado.
v_impuesto_pagar number(18,2);
--Valor resultante de calcular sobre el valor facturado el
impuesto a pagar.
begin
v_impuesto_pagar := round((v_valor_facturado * c_impuesto)/100,2);
dbms_output.put_line('De un valor facturado de: '||v_valor_facturado||' el impuesto a pagar es:
'||v_impuesto_pagar);
end;
10. Tareas del Módulo 2
1.
2.
3.
4.
Construya un PL anónimo que calcule para un total de venta
realizado el valor de IVA a pagar, demuestre los valores de Venta e
IVA.
Cree un PL anónimo para que de un valor definido como variable
controle si es positivo o negativo, de ser positivo que retorne el
mensaje: Positivo, de ser negativo que muestre el mensaje: Negativo.
Construya un PL anónimo con una constante que contenga un
divisor, una variable que contenga el número a dividir, si el residuo de
la división es cero (0) entonces que despliegue la leyenda ‘Realizar
commit’, si no es cero, entonces que despliegue la leyenda: ‘Aún no
realizar comit’; Valor de la constante = 1000, primer valor de la
variable = 2000.
Codifique un PL anónimo que tenga una constante que será una
fecha fija esperada = 20/diciembre/2013, una variable que tendrá una
fecha a evaluar, si la fecha esperada es igual a la evaluada, que se
indique un mensaje así: ‘Fechas coinciden’, de lo contrario la leyenda
‘Fechas no coinciden’.
11. Tabla de Valoración para la tarea
Elemento Entregado
Punteo
PL anónimo 1
25
PL anónimo 2
25
PL anónimo 3
25
PL anónimo 2
25