Documentos de Académico
Documentos de Profesional
Documentos de Cultura
1415 - Apuntes PLSQL
1415 - Apuntes PLSQL
INDICE
Pgina
2.1. Introduccin
13
2.6. Procedimientos
20
2.7. Funciones
23
25
2.9. Ejercicios
29
43
2.1. INTRODUCCION
El PL/SQL es un lenguaje de programacin de ORACLE. Es un lenguaje de
procesamiento procedimental que dispone de estructuras de programacin
parecidas a las de la mayora de los lenguajes de programacin.
Es una extensin del SQL y su inters est en poder mezclar la potencia de las
instrucciones de SQL con la flexibilidad de un lenguaje procedimental en un
mismo programa.
Estos programas pueden ser ejecutados directamente por las herramientas de
Oracle (bloques) o a partir de objetos de la base de datos (procedimientos
almacenados y paquetes).
Las ventajas del lenguaje PL/SQL son diversas:
DECLARE
// SENTENCIAS EJECUTABLES
// Instrucciones procedimentales + SQL.
EXCEPTION
Declaracin de excepciones;
END;
La seccin DECLARE, que permite declarar las variables que van a utilizarse
en el bloque PL/SQL slo es necesaria cuando es preciso definir variables en el
bloque. Del mismo modo, la seccin EXCEPTION slo existir si se van a tratar
situaciones de error o excepcin.
Las nicas instrucciones SQL permitidas en un bloque PL/SQL son las
instrucciones para manipulacin de datos como INSERT, UPDATE, DELETE y
SELECT y las instrucciones para control de transacciones.
Otras instrucciones de SQL como DROP, CREATE o ALTER no estn
permitidas.
Nom-variable tipo-datos;
TIPOS DE DATOS
Escalares
Compuestos
almacenando
fracciones de segundo adems de los datos de ao, mes, da, hora, minuto
y segundo.
X:= 3
SELECT ENAME INTO nom-variable FROM ....
Declaraciones de ejemplo:
DECLARE
Fecha_alta DATE;
Nombre
Salario
NUMBER(7);
Respuesta
DECLARE
SAL_MIN EMP.SALARIO%TYPE;
BEGIN
SELECT MIN(SALARIO) INTO SAL_MIN FROM EMP;
UPDATE EMP SET SALARIO=SALARIO+SAL_MIN
WHERE DEPT_NO=30;
END;
/
%TYPE: Declara una variable con el mismo tipo de datos de otra variable o
columna de tabla.
Ejemplo1:
EMPNO
EMP.EMPNO%type;
Ejemplo2:
ANNO NUMBER(4);
MES ANNO%TYPE;
%ROWTYPE: Declara una variable registro con la misma estructura que una
tabla o vista. Las columnas de la fila y los campos de la variable tendrn los
mismos nombres y tipos.
Ejemplo:
DECLARE
REG_EMP
EMP%ROWTYPE;
.......
BEGIN
SELECT * INTO REG_EMP FROM EMP WHERE condicin;
END;
Ejemplo:
DECLARE
TYPE REG_EMP IS RECORD
(EMPNO
ENAME
VARCHAR2(10),
OFICIO
VARCHAR2(14);
.....
DEPTNO
NUMBER(4));
IF cond-1 THEN
Sentencias;
ELSIF cond-2 THEN
Sentencias;
ELSE
Sentencias;
END IF;
CASE variable
WHEN valor1 THEN
sentencias;
WHEN valor2 THEN
sentencias;
WHEN valor3 THEN
sentencias;
ELSE
sentencias;
END CASE;
CASE
WHEN cond1 THEN
sentencias;
WHEN condr2 THEN
sentencias;
WHEN cond3 THEN
sentencias;
ELSE
sentencias;
END CASE;
c) Repetitivas
LOOP
Sentencias;
If condicin then EXIT;
Sentencias;
END LOOP;
LOOP
Sentencias;
EXIT WHEN condicin-salida;
Sentencias;
END LOOP;
WHILE cond LOOP
Sentencias;
END LOOP;
FOR variable IN [REVERSE] valor-inic .. valor-fin LOOP
Sentencias;
END LOOP;
1) Declarar el cursor:
DECLARE
CURSOR nom-cursor IS Sentencia-select;
3) Recuperar los registros uno por uno y tratarlos. Las filas devueltas por la
SELECT son tratadas una por una; el valor de cada columna especificada en la
SELECT debe almacenarse en una variable
LOOP
FETCH nom-cursor INTO variables;
EXIT WHEN nom-cursor%NOTFOUND;
END LOOP;
La instruccin FETCH extrae una soloa fila cada vez; para tratar n filas es
necesario utilizar un bucle.
4) Cerrar el cursor. Despus de tratar todas las filas, se cierra el cursor para
liberar el espacio en memoria
CLOSE nom-cursor;
DECLARE
REG_EMP EMP%ROWTYPE;
CURSOR C1 IS
SELECT * FROM EMP WHERE DEPT_NO=30;
BEGIN
OPEN C1;
LOOP
FETCH C1 INTO REG_EMP;
EXIT WHEN C1%NOTFOUND;
Sentencias;
END LOOP;
CLOSE C1;
Variables especiales:
CURSOR FOR
11
Sintaxis:
CURSOR C1 IS
SELECT campos-seleccin FROM Tabla
FOR UPDATE OF campo-1, campo-2;
LOOP
UPDATE .......WHERE CURRENT OF C1;
END LOOP;
Ejercicio: n 2 y 3
12
Sintaxis:
EXCEPTION
WHEN <nombre-excepcin> THEN
<secuencia-sentencias>;
WHEN <nombre-excepcin> THEN
<secuencia-sentencias>;
...........
WHEN OTHERS THEN
<secuencia-sentencias>;
END;
13
Los
siguientes
nombres
de
excepciones
son
excepciones
estndar
predefinidas:
Excepcin
Significado
Error
de Valor
Oracle
DUP_VAL_ON_INDEX
SQLCODE
-1
-1001
number
falla
-1722
(ej:
to_number(12a)
LOGON_DENIED
Cuando
se
ha
utilizado
un ORA-01017
-1017
no ORA-01403
+100
USERNAME incorrecto
NO_DATA_FOUND
Cuando
una
consulta
Estas excepciones:
- no se declaran en DECLARE
- no se mencionan en BEGIN, slo en EXCEPTION:
WHEN nom-excep THEN sentencias;
14
de
-1422
Excepciones que tienen relacin con errores ORACLE (not found, etc.)
15
DECLARE
Nom-excep EXCEPTION;
PRAGMA EXCEPTION_INIT(nom-excep,-cd_error);
- En el BEGIN no se pone nada
- En EXCEPTION
WHEN nom-excep THEN sentencia;
Ejemplo:
DECLARE
Mes-error EXCEPTION;
PRAGMA EXCEPTION_INIT(Mes_error,-1843);
BEGIN
Sentencias;
EXCEPTION
WHEN mes_error THEN sentencias;
.....
WHEN OTHERS THEN sentencias;
END;
DECLARE
Nom-excepcin EXCEPTION
BEGIN
IF condicin THEN RAISE nom-excepcin;
EXCEPTION
WHEN nom-excepcin THEN sentencias;
16
Ejemplo:
DECLARE
DEMASIADO EXCEPTION;
BEGIN
.........
IF NUM_CAMAS>1000 THEN
RAISE DEMASIADO;
EXCEPTION
WHEN DEMASIADO THEN
.........;
END;
Para registrar los posibles errores, el usuario puede crear una tabla de errores
donde va almacenando los mensajes correspondientes a los errores que se
producen. Por ejemplo:
VARCHAR(100),
FECHA
DATE,
USUARIO
VARCHAR(100));
17
Ejemplo:
DECLARE
CODIGO
TAB_ERRORES.MENS1%TYPE;
MENSAJE
TAB_ERRORES.MENS2%TYPE;
EXCEPTION
...........
...........
WHEN OTHERS
CODIGO:=SQLCODE;
MENSAJE:=SQLERRM;
INSERT INTO TAB_ERRORES
VALUES(CODIGO,MENSAJE,SYSDATE,USER);
SET SERVEROUTPUT ON
Para sacar por pantalla otro mensaje distinto del standard la instruccin es:
DBMS_OUTPUT.PUT_LINE(mensaje)
DBMS_OUTPUT.PUT(mensaje)
DBMS_OUTPUT.PUT(variable)
Ejemplo:
DBMS_OUTPUT.PUT(el salario es)
DBMS_OUTPUT.PUT(SALARIO)
18
Ejercicio de a y b1:
2) Crear un bloque PL/SQL que recupere el salario del DNI 1111 en una
variable definida como NUMBER(3) (para que d error). Si no encuentra
filas en la tabla, emitir el mensaje No hay filas. S da el error 06502, sacar
el mensaje esa columna no tiene ese tipo de datos.
19
2.6. PROCEDIMIENTOS
Los procedimientos son bloques PL/SQL con nombre, que pueden recibir
parmetros y ser invocados directamente.
Creacin de un procedimiento:
De entrada: IN o blanco
De salida: OUT
Compilar un procedimiento:
START nom-fichero
@nom-fich
20
Ejecutar un procedimiento:
Tablas especiales:
Ejercicios: n 6, 7, 8, 9, 10
PROCEDIMIENTOS ANIDADOS
procedimiento almacenado.
21
Contenido de PROG1.SQL:
SET SERVEROUTPUT ON;
CREATE OR REPLACE PROCEDURE PPAL(ND DEPT.DEPT_NO%TYPE) IS
REG_D DEPT%ROWTYPE;
TOT_EMP NUMBER;
BEGIN
SELECT * INTO REG_D FROM DEPT WHERE DEPT_NO=ND;
DBMS_OUTPUT.PUT_LINE ('DEPARTAMENTO '|| ND || ' ' ||
REG_D.DNOMBRE);
SUBRUT1(ND, TOT_EMP);
DBMS_OUTPUT.PUT_LINE ('N EMPLEADOS QUE TIENE: '|| TOT_EMP);
END;
/
Contenido de SUBRUT1.SQL:
CREATE OR REPLACE PROCEDURE SUBRUT1(ND IN EMP.DEPT_NO%TYPE, TOT_EMP
OUT EMP.SALARIO%TYPE) IS
BEGIN
SELECT COUNT(*) INTO TOT_EMP FROM EMP WHERE DEPT_NO=ND;
END;
/
Se compilan (1 la subrutina):
@SUBRUT1
@PROG1
Se ejecuta el procedimiento principal: EXECUTE PPAL(10) y el resultado es 3.
Ejercicio: n11
22
2.7. FUNCIONES
Una funcin es un fragmento de cdigo PL/SQL que devuelve un valor.
La programacin de funciones definidas por el usuario es muy similar a la de
los procedimientos almacenados.
Sintaxis:
CREATE [OR REPLACE] FUNCTION
Nombre-funcin (arg-1 [IN] tipo-dato, ....)
RETURN tipo-dato
IS
Declaracin variables;
BEGIN
Cuerpo-funcin;
RETURN (variable);
END nom-fun;
/
OR REPLACE: Si la funcin ya existe, se reemplaza en el diccionario de
datos.
arg: argumento o parmetro que se pasa como dato de entrada y que se
usa como una variable dentro del bloque
RETURN tipo-dato: tipo del valor devuelto por la funcin
23
Ejemplo: Crear una funcin que nos devuelva el sueldo del empleado a partir
de su nmero de empleado.
En un fichero prog2.sql:
CREATE OR REPLACE FUNCTION GET_SAL (F_EMP_NO IN EMP.EMP_NO%TYPE)
RETURN NUMBER
IS
F_EMP_SAL EMP.SALARIO%TYPE := 0;
BEGIN
SELECT SALARIO INTO F_EMP_SAL FROM EMP
WHERE EMP_NO=F_EMP_NO;
RETURN (F_EMP_SAL);
END GET_SAL;
--> 10400
24
25
instruccin DML (opcin FOR EACH ROW) o una sola vez para cada
instruccin DML ejecutada (opcin predeterminada).
Aumentan la productividad
Sintaxis:
26
Ejercicio: Coger las tablas EMP y DEPT y aadirles 2 columnas a cada una:
USUARIO y FECHA. Crear un trigger que cada vez que se realice una
insercin o modificacin, se registre el usuario y la fecha. Para ello utilizar las
variables del sistema USER y SYSDATE.
Estructura:
CREATE OR REPLACE TRIGGER nom-trigger
BEFORE INSERT OR UPDATE
FOR EACH ROW
DECLARE
BEGIN
:NEW.nom-campo:= valor;
:NEW.nom-campo:= valor;
END;
Ejemplo:
27
28
Ejercicio 1
Crear la tabla MEDICOS (COD_H, NOMBRE, NUM_MED) para contener el
cdigo y nombre de cada hospital, junto con el nmero de doctores que
trabajan en cada uno.
A continuacin, crear un bloque PL/SQL que recorra los hospitales de la tabla
HOSPITAL, y por cada uno inserte una fila en la tabla MEDICOS, donde el
valor de NUM_MED ser el nmero de mdicos que trabajan en dicho hospital.
Ejercicio 2
Aumentar el salario a los empleados de la tabla EMP utilizando bloqueo
mientras se actualiza.
Ejercicio 3
Aumentar el salario de los empleados de la tabla PLANTILLA de la siguiente
forma:
29
Ejercicio 5
Comprobar que en todos los hospitales hay por lo menos un cardilogo. En
caso negativo mandar un mensaje a pantalla tratndolo como una excepcin.
(se puede hacer comprobando que el n de hospitales de la tabla HOSPITAL
sea igual al n de hospitales que tienen cardilogos en la tabla DOCTOR).
Ejercicio 6
Crear un procedimiento PL/SQL que reciba como parmetro la inscripcin de
un enfermo. El procedimiento deber sacar un mensaje por pantalla indicando
el nombre del doctor que trata a dicho enfermo as como cul es su
especialidad. Adems, si el enfermo no existe en la tabla deber mandar un
mensaje indicando tal hecho (tratarlo como excepcin). Por ltimo se deber
comprobar si hay ms enfermos tratados por dicho mdico; en caso afirmativo
se sacar un mensaje por pantalla que lo indique (tratarlo tambin como una
excepcin).
Ejemplos:
1. El doctor que atiende al paciente 10995 es LOPEZ A., cuya especialidad
es CARDIOLOGIA
Adems, existen otros enfermos tratados por el mismo mdico.
2. Ese enfermo no existe.
3. El doctor que atiende al paciente 39217 es ADAMS C., cuya
especialidad es NEUROLOGIA
Ejercicio 7
Crear un procedimiento que tome como parmetro de entrada el nombre de un
hospital y que visualice por pantalla los nombres de los doctores que trabajan
en el hospital y su especialidad. Si el hospital no existe, visualizar un mensaje
de error.
Ejercicio 8
Crear un procedimiento al que se le pasen 2 parmetros (el nmero de
empleado y el aumento de salario) y que incremente el el salario del empleado
en cuestin. Adems:
30
Ejercicio 9
Crear una tabla PORCEN con los siguientes campos:
EMPNO
NUMBER(4)
TOTAL
NUMBER(15)
ARAS
NUMBER(15)
En EMPNO: el n empleado
EMPNO
TOTAL
ARAS
3%
3%
5%
8%
10%
18%
......
100%
Ejercicio 10
Crear la siguiente tabla:
LIBRO
COD_LIB
STOCK
STOCK_MIN
L1
10
L2
L3
30
31
En el caso de que el stock actualizado sea mayor que el triple del stock
mnimo, visualizar el mensaje Demasiados libros en stock.
Ejercicio 11
Crear un procedimiento que d una lista de los apellidos de los doctores de una
determinada especialidad junto con el nmero de enfermos que atiende cada
uno. El procedimiento recibir como parmetro el nombre de la especialidad, y
por cada doctor de la misma llamar a otro procedimiento (o subrutina). Este
recibir como parmetro un nmero de doctor y devolver al procedimiento
principal el nmero de pacientes que dicho doctor atiende.
Ejercicio 12
Crear una funcin HOSP que obtenga el nmero de mdicos de una
especialidad que trabajan en un determinado hospital. Se suministrarn como
parmetros el cdigo del hospital y la especialidad.
Ejercicio 13
Crear una funcin MEDIA_ENF que obtenga el nmero medio de pacientes que
atienden los mdicos de un determinado hospital. Se suministrar el nombre
del hospital (si no existe, indicarlo en un mensaje).
b) Ejecutar la funcin desde SQLPlus
c) Crear un procedimiento que saque por pantalla el nombre de cada hospital y
el nmero medio de pacientes que atiende cada medico del hospital. Se
utilizar la funcin MEDIA_ENF
Ejercicio 14
1. Crear un procedimiento INCRE que realice lo siguiente: Dado el nombre de
un departamento, en primer lugar, comprobar que el departamento existe, y
en caso contrario enviar el mensaje de error correspondiente.
Seguidamente, recorrer los empleados de dicho departamento y por cada
uno de ellos llamar a una subrutina que calcule el incremento salarial para
el mismo (se pasar como parmetro el salario):
33
Ejercicio 21
Disponemos de las siguientes tablas:
MEDICO (DNI_M, NOMBRE, ESPECIALIDAD, LOCALIDAD)
TRATAMIENTOS (DNI_M, DNI_P, MEDICAMENTO, DOSIS, FECHA)
NEGLIGENCIAS (DNI_M, NOMBRE, DOSIS)
Crear un bloque PL/SQL que recorra los mdicos cuya especialidad sea la
traumatologa y realice lo siguiente:
34
Ejercicio 23
EMP (EMP_NO, NOMBRE, DIRECCION, TF, SALARIO)
PROYECTO (COD_P, NOM_P, PRESUP)
PARTICIPAC (EMP_NO, COD_P, HORAS, FUNCION)
Se desea crear un procedimiento que reciba como parmetro un cdigo de
proyecto. Deber recorrer los registros de aquellos empleados que han
participado en el proyecto e incrementarles el sueldo en un valor equivalente al
nmero de horas invertidas (HORAS) durante ese mes multiplicado por el
precio hora.
Este incremento se calcular por medio de una subrutina a la que se le pasar
como parmetro el cdigo de proyecto y el cdigo del empleado.
El precio hora se calcular de la siguiente forma:
35
Ejercicio 24
36
Ejercicio 25
Sea la siguiente BD con informacin referente al alquiler de casas rurales de un
territorio:
MUNICIPIO (COD_M, NOM_M)
CASA_RURAL (COD_C, DIR, COD_M, PROPIETARIO,
INGRESOS, GASTOS, VALORACIN)
ALQUILERES (COD_C, FECHA_A, N_DIAS, CLIENTE)
PRECIO_DIA,
Una vez procesadas todas las casas rurales del municipio, si dicho municipio
tiene ms de 5 casas se disparar un excepcin que indicar mediante un
mensaje en nmero de casas rurales del municipio y el importe total generado
por el alquiler del conjunto de casas durante el periodo.
37
Ejercicio 26
Dada una BD formada por las siguientes tablas:
Recorrer todos los alquileres de los clientes de esa provincia, y por cada
alquiler calcular los puntos correspondientes a ese alquiler, y actualizar
los puntos del cliente en la tabla cliente sumando los puntos calculados a
los que ya tena el cliente.
Una vez actualizados los puntos de todos los clientes, si no hay ningn
cliente de esa provincia que haya superado los 10.000 puntos, se lanzar
una excepcin y se visualizar el siguiente mensaje: GANADOR
DESIERTO
38
Ejercicio 27
Se dispone de una BD que recoge la informacin de los seguros de los coches
para el ao actual, mediante las siguientes tablas:
COCHE (Num_mat, marca, modelo, color, dni_prop)
PROPIETARIOS(Dni, nombre, direccin, edad, sexo)
ACCIDENTE (Dni, fecha, lugar, daos)
SEGUROS (Num_poliza,
inicialmente est vaca.
num_mat,
prima,
fecha).
La
tabla
Seguros
Fecha:
ao del seguro.
39
Ejercicio 28
Sean las siguientes tablas que reflejan una competicin de videojuegos:
JUGADOR(DNI, NOMBRE, DIR, FECHA_NAC, CACH)
VIDEOJUEGO(COD_VIDEOJ, DENOM_VIDEOJ, TIPO, NIVEL)
JUEGA(DNI, COD_VIDEOJ, N_JUGADA, PUNTOS)
RESULTADO(NOMBRE, CACH , DENOM_VIDEOJ, PUNTOS)
Inicialmente la tabla RESULTADO est vaca. Cada jugador juega a cada
videojuego de la tabla, 3 veces, y se guardan los puntos obtenidos en la tabla
JUEGA.
1. Crear un procedimiento pl/sql que realice lo siguiente:
En primer lugar deber comprobar que t participas en la competicin. Si no
participas (es decir, no apareces en la tabla JUEGA) se deber enviar un
mensaje a pantalla indicando tal hecho. Tratarlo como una excepcin para que
aborte la ejecucin del bloque.
En segundo lugar, deber introducir en la tabla RESULTADO una fila por cada
jugador y videojuego jugado indicando el nombre del jugador, su cach, la
denominacin del videojuego y la puntuacin mxima que ha obtenido dicho
jugador en dicho videojuego (la mayor de las 3 puntuaciones que debe tener).
Despus de finalizar la introduccin de filas en la tabla RESULTADO se deber
comprobar que slo hay un ganador de cada videojuego (es decir, que la
puntuacin mxima de cada videojuego solo aparece una vez). Para ello ser
preciso recorrer la tabla RESULTADO y comprobar que la puntuacin mxima
de cada videojuego solo la tiene un jugador. En caso de que haya algn
empate, se deber aumentar a cada jugador empatado el campo PUNTOS
aadindole su cach (el cach es un campo numrico que tienen todos los
jugadores de tal forma que no puede haber dos jugadores con el mismo
cach). Adems, por cada videojuego y despus de resolver el empate (si es
que lo ha habido) se deber sacar por pantalla el ganador del videojuego
indicando la denominacin del videojuego, y el nombre del ganador:
El ganador del videojuego aaa es xxx
El ganador del videojuego bbb es yyy
El ganador del videojuego ccc es zzz
...
2.- Crear una funcin a la que se le pase como parmetro la denominacin de
un videojuego y saque por pantalla el nmero de participantes que han jugado
a ese videojuego en la competicin.
40
Ejercicio 29
Se dispone de una BD que recoge la informacin de las calificaciones obtenidas por
los alumnos que han finalizado sus estudios durante el curso 0910 en la Universidad
de Deusto, teniendo en cuenta que se imparten varias titulaciones y que un alumno
puede cursar varias titulaciones a la vez.
ALUMNO (DNI, NOM, DIR, TF, COD_TIT, NANIOS)
TITULACION (COD_TIT, NOM_TIT)
EXPEDIENTE_0910 (DNI, COD_A, CRED, COD_TIT, CALIF)
MEDIA_EXPED (DNI, NOM, COD_TIT, NOTA_MEDIA, MENSAJE)
Se pide:
1. Codificar un procedimiento PL/SQL que reciba como parmetro el nombre
de una titulacin y obtenga el nombre y nota media del alumno con el mejor
expediente de la misma.
41
Ejercicio 30
Sea una entidad bancaria que desea gestionar los regalos que enva a sus
clientes en funcin de los puntos obtenidos por operaciones bancarias.
Dispondr de una BD con las siguientes tablas:
CLIENTE (DNI, NOMBRE, DIRECCIN, PUNTOS)
REGALOS(COD_R, NOM_R, PUNTOS, STOCK)
SOLICITUDES (DNI, COD_R, FECHA)
ENVIOS (DNI, NOM_R, FECHA, TEXTO)
Se pide codificar un procedimiento en PLSQL que reciba como parmetro dos
fechas y gestione las solicitudes de regalos recibidas por los clientes del banco
entre ambas fechas de la siguiente forma:
En primer lugar se comprobar que el cliente existe. Si no es as, se disparar
una excepcin y se enviar el mensaje EL CLIENTE NO EXISTE.
A continuacin, se llamar a una subrutina REGALO a la que se le pasar
como parmetro el DNI del cliente, el cdigo del regalo solicitado y los puntos
de que dispone el cliente, y la misma devolver el nombre de regalo
correspondiente y un TEXTO.
La subrutina comprobar que el cliente tiene suficientes puntos para conseguir
el regalo.
Si no tiene suficientes puntos, devolver al programa principal el nombre
del regalo y el texto PUNTOS INSUFICIENTES.
Si dispone de suficientes puntos, comprobar que el STOCK del regalo
es superior a 0. Si no es as devolver el nombre del regalo y el texto
REGALO NO DISPONIBLE.
En caso de que s haya disponibilidad, actualizar el stock del regalo
restando 1 unidad, adems se restarn los puntos del regalo del saldo
de puntos del cliente y la subrutina devolver el nombre del regalo y el
texto OK.
Una vez devuelto el control al programa principal, ste insertar una fila en la
tabla ENVIOS, con el DNI del cliente, el nombre del regalo y texto recibidos y la
fecha del sistema.
Para terminar, se contabilizar el nmero de regalos que se van a atender
satisfactoriamente en dicha fecha. En el caso de que sea superior a 100, se
disparar una excepcin y se enviar el mensaje DEMASIADOS REGALOS.
42
Tabla ENFERMO
INSCRIPCION
APELLIDO
DIRECCION
FECHA_NAC
S
NSS
DOCTOR_NO
Tabla HOSPITAL
HOSPITAL_COD
NOMBRE
DIRECCION
TELEFONO
NUM_CAMA
Tabla SALA
HOSPITAL_COD
SALA_COD
NOMBRE
NUM_CAMA
Tabla PLANTILLA
HOSPITAL_COD
SALA_COD
EMPLEADO_NO
APELLIDO
FUNCION
TURNO
SALARIO
43
Tabla DOCTOR
HOSPITAL_COD
DOCTOR_NO
APELLIDO
ESPECIALIDAD
2.-
Tabla EMP
EMP_NO
APELLIDO
OFICIO
DIR
FECHA_ALT
SALARIO
COMISION
DEPT_NO
Tabla DEPT
DEPT_NO
DNOMBRE
LOC
44