7 Introducción A La Programación
7 Introducción A La Programación
7 Introducción A La Programación
-- en línea
/* párrafo */
Las variables se caracterizan por su nombre,
compuesto por letras, números y los
caracteres $, _ ó # y su longitud puede ser
máximo de 30 caracteres.
Sintaxis:
Ejemplo:
vNombre:=’Mariana Ruíz’;
vClaveEmp:=234;
DECLARE
fecha DATE;
depNum NUMBER(2) NOT NULL := 10;
ciudad VARCHAR(12) := ‘Ciudad Real’;
KmMilla CONSTANT NUMBER(2,1) := 1.4;
Se pueden realizar operaciones entre
variables y ser almacenadas
Sintaxis:
Ejemplo:
vBalance NUMBER(5,2);
vBalanceMinimo vBalance%TYPE := 10;
vNombre empleado.nombre%TYPE;
Sintaxis:
nombreVariable {tabla | cursor} %ROWTYPE;
Ejemplo:
vArticulo articulo%ROWTYPE;
Conjuntos de variables de diferente tipo que
estan relacionados entre sí.
Sintaxis :
TYPE rRegistro IS RECORD(
Campo1 tipo1 [NOT NULL] [ :=expr1],
Campo2 tipo2 [NOT NULL] [ :=expr2],
Campon tipon [NOT NULL] [ :=exprn]
);
Ejemplo:
DECLARE
TYPE rCliente IS RECORD(
numCli NUMBER(4),
nomCli VARCHAR(30),
direcCli VARCHAR(50)
);
vCliente rCliente;
Las órdenes que se pueden ejecutar dentro de
pl/sql son únicamente las del lenguaje de
manipulación de datos, así como sentencias
de control de flujo.
Sintaxis:
Sintáxis
DBMS_OUTPUT.PUT_LINE(‘Mensaje ’||nombre);
Ejemplo:
DECLARE
vArea NUMBER(5);
vNombre VARCHAR(20);
BEGIN
SELECT claveArea, nomArea
INTO vArea, vNombre
FROM area
WHERE seccion='C';
DBMS_OUTPUT.PUT_LINE('area '||vArea);
DBMS_OUTPUT.PUT_LINE('nombre '||vNombre);
END;
/
Podemos guardar el bloque anónimo en un
archivo para después volverlo a utilizar. Para
ello utilizamos la siguiente sentencia:
Sintáxis:
DECLARE
vNomArea area.nomArea%TYPE;
BEGIN
SELECT nomArea INTO vNomArea
FROM area
WHERE claveArea= &claveArea;
DBMS_OUTPUT.PUT_LINE (vNomArea);
END;
/
La sintaxis no varía:
UPDATE tabla
SET valor = expresión
WHERE condición;
Condicionales
Repetición (ciclos)
Sentencia IF
Sintaxis:
Sintáxis
CASE selector
WHEN expresion1 THEN instrucciones
WHEN expresión2 THEN instrucciones
….
WHEN expresionN THEN instrucciones
[ELSE instrucciones];
END CASE;
Sentencia LOOP
Sintaxis:
LOOP
instrucciones
[EXIT WHEN condición]
END LOOP;
Sintaxis:
DECLARE
-- Declaraciones
BEGIN
-- Ejecución
EXCEPTION
-- Excepción
END;
Son aquellas que se disparan automáticamente
al producirse determinados errores. Las más
comunes son:
DECLARE
-- Declaraciones
BEGIN
-- Ejecución
EXCEPTION
WHEN NO_DATA_FOUND THEN
-- Cuando ocurre una excepción DATO NO ENCONTRADO
WHEN ZERO_DIVIDE THEN
-- Cuando ocurre una excepción DIVISION ENTRE CERO
WHEN OTHERS THEN
-- Cuando ocurre una excepción de un tipo no tratado
-- en los bloques anteriores
END;
/
Son aquellas que crea el usuario. Para ello se
requieren tres pasos:
DECLARE
...
exImporteMal EXCEPTION;
...
BEGIN
...
IF precio NOT BETWEEN mínimo AND máximo
THEN
RAISE exImporteMal;
END IF;
...
EXCEPTION
WHEN exImporteMal
THEN
DBMS_OUTPUT.PUT_LINE(‘Importe incorrecto’);
...
END;
En PL/SQL se incluye un procedimiento llamado
RAISE_APPLICATION_ERROR que nos sirve para
levantar errores y definir mensajes de error. Su
formato es el siguiente:
RAISE_APPLICATION_ERROR(númeroError,mensajeError);
◦ Sección Ejecutable
◦ Sección de Excepciones
Ejemplos:
Sección ejecutable
BEGIN
IF SQL % NOTFOUND THEN
RASE_APPLICATION_ERROR (-20001, ‘No existen registros’ );
END IF;
END;
Sección de excepciones
EXCEPTION
WHEN NO_DATA_FOUND THEN
RASE_APPLICATION_ERROR (-20002, ‘Datos no encontrados’ );
END;
BEGIN
SELECT horas INTO vHorasActuales
FROM empleado
WHERE idEmpleado=vEmpleado;
IF vHorasActuales IS NULL
THEN
RAISE_APPLICATION_ERROR(-20010,'No tiene horas');
ELSE
UPDATE empleado
SET horas=vHorasActuales + subirHoras
WHERE idEmpleado=vEmpleado;
END IF;
END;
Una excepción es válida dentro del bloque o
programa donde ha sido declarada.
Las excepciones predefinidas son siempre
válidas.
Una excepción declarada en un bloque es
local a ese bloque y global a todos los sub
bloques que comprende.
Es un conjunto de comandos SQL que
pueden ser compilados y almacenados en el
servidor.
EXEC <nombreProcedimiento>(parámetros);
DROP PROCEDURE <nombreProcedimiento>;
SQL>SHOW ERRORS
Ejemplo : Procedimiento para dar de alta un
área, realice lo siguiente:
EXEC spAltaArea(235,’Mecatrónica’,’A’);
Obteniéndose :
BEGIN
spAltaNuevaArea (132, 'Transferencia', 'A');
END;
/
o bien
EXEC spAltaNuevaArea(232,'Contratación','B');
Ejemplo: Procedimiento para dar de baja un
área
EXEC spBajaArea(123);
Obteniéndose:
Obteniéndose:
SELECT MAX(claveArea)
INTO numArea
FROM area;
COMMIT;
END spActualizaArea;
/
Ejecutamos el procedimiento
EXEC spActualizaArea(234,’Civil’,’C’);
EXEC spActualizaArea(121,’Hidraulica’,’B’);
EXEC spAjusteSalario(1.4);
BEGIN
SELECT COUNT(tipoCargo)
INTO numTipoCargo
FROM cargo;
FOR indice IN 1.. numTipoCargo LOOP
SELECT costo
INTO cargoActual
FROM cargo
WHERE tipoCargo = indice;
END LOOP;
DBMS_OUTPUT.PUT_LINE('Cargos Actualizados');
COMMIT;
END spActualizaCosto;
/
EXEC spActualizaCosto;