curso de pl sql básico
DESCRIPTION
Curso Básico de PL SQL sesión 2.TRANSCRIPT
Curso de PL/SQL BásicoPor: Byron Quisquinay
M2
%typeCon 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.
Explorando %typeUsted debe contar con el Script:
Script_curso_PLSQL_Basico_m2_01.sql.Entonces encontrará el PL anónimo:
--Pl/SQl anónimo: Uso de %typeCópielo a su herramienta, analicemos su
construcción y funcionamiento.Ejecútelo
--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: 01declare
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;
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?
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;
Practicando un pocoConstruya 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”.
ConstantesAl 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: Realizando cálculos empleando constantes
Analice el PL.Ejecútelo.
--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: 01declare 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;
Tareas del Módulo 21. 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.
2. 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.
3. 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.
4. 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’.
Tabla de Valoración para la tareaElemento Entregado Punteo
PL anónimo 1 25
PL anónimo 2 25
PL anónimo 3 25
PL anónimo 2 25