106 lines
3.8 KiB
MySQL
106 lines
3.8 KiB
MySQL
|
SET SERVEROUTPUT ON;
|
|||
|
|
|||
|
-- ej1
|
|||
|
|
|||
|
/* Declara una variable departamento que tenga como tipo de dato una fila
|
|||
|
* completa de la tabla dept.
|
|||
|
*
|
|||
|
* Después, mediante un cursor implícito, guarda en esa variable departamento la
|
|||
|
* fila de la tabla dept cuyo campo loc vale CHICAGO. Para terminar, utiliza un
|
|||
|
* bucle FOR que recorra todas las letras del nombre (dname) de la fila guardada
|
|||
|
* en la variable departamento y vaya mostrando en cada iteración, cada letra
|
|||
|
* de dname.
|
|||
|
*/
|
|||
|
|
|||
|
DECLARE
|
|||
|
departamento dept%ROWTYPE;
|
|||
|
BEGIN
|
|||
|
SELECT * INTO departamento FROM dept WHERE loc='CHICAGO';
|
|||
|
FOR i IN 1..LENGTH(departamento.dname)
|
|||
|
LOOP
|
|||
|
dbms_output.put_line(SUBSTR(departamento.dname,i,1));
|
|||
|
END LOOP;
|
|||
|
END;
|
|||
|
/
|
|||
|
|
|||
|
-- ej2
|
|||
|
|
|||
|
/*
|
|||
|
* Crea un tipo de dato registro con los campos id (tipo de dato igual a deptno de
|
|||
|
* la tabla dept) y nombre (tipo de dato igual a dname de la tabla dept) y declara
|
|||
|
* una variable departamento del tipo de ese registro. Ahora usa un cursor
|
|||
|
* implícito para guardar en esa variable departamento el deptno y el dname de la
|
|||
|
* fila de la tabla dept cuyo deptno vale 10. Para terminar, muestra por pantalla
|
|||
|
* el id y el nombre de la variable departamento obtenido.
|
|||
|
*/
|
|||
|
|
|||
|
DECLARE
|
|||
|
TYPE DEPT_DATA IS RECORD(
|
|||
|
id dept.deptno%type,
|
|||
|
nombre dept.dname%type);
|
|||
|
departamento DEPT_DATA;
|
|||
|
BEGIN
|
|||
|
SELECT deptno, dname INTO departamento
|
|||
|
FROM dept WHERE deptno=10;
|
|||
|
dbms_output.put_line(departamento.id || ' ' ||
|
|||
|
departamento.nombre);
|
|||
|
END;
|
|||
|
/
|
|||
|
|
|||
|
-- ej3
|
|||
|
|
|||
|
/*
|
|||
|
* Se necesita un registro para los empleados y otro para las localidades.
|
|||
|
*
|
|||
|
* El registro de empleados debe tener los siguientes campos: id (tipo de dato
|
|||
|
* igual que el campo empno de la tabla emp), nombre (tipo de dato igual que el
|
|||
|
* campo ename de la tabla emp), sueldo (tipo de dato igual que el campo sal de la
|
|||
|
* tabla emp), localidad (tipo de dato igual que el registro de localidades).
|
|||
|
*
|
|||
|
* El registro de localidades debe tener los siguientes campos: ref (varchar
|
|||
|
* tamaño 3 con valor MAI), localidad varchar tamaño 50 con valor MAIRENA,
|
|||
|
* provincia (varchar tamaño 50 con valor SEVILLA) y cp (int tamaño 5 con valor
|
|||
|
* 41927).
|
|||
|
*
|
|||
|
* Se quiere declarar una variable del tipo registro empleado y un cursor
|
|||
|
* explícito que se traiga los campos empno, ename y sal de la tabla emp.
|
|||
|
*
|
|||
|
* Recorre todas las filas del cursor declarado con un bucle LOOP, guardando los
|
|||
|
* datos extraídos en la variable del tipo registro empleado.
|
|||
|
*
|
|||
|
* En cada iteración del bucle LOOP muestra por pantalla id, nombre, sueldo, ref
|
|||
|
* de localidad, localidad de localidad, provincia de localidad y cp de
|
|||
|
* localidad.
|
|||
|
*/
|
|||
|
|
|||
|
DECLARE
|
|||
|
TYPE LOC_DATA IS RECORD(
|
|||
|
ref VARCHAR(3) := 'MAI',
|
|||
|
localidad VARCHAR(50) := 'MAIRENA',
|
|||
|
provincia VARCHAR(50) := 'SEVILLA',
|
|||
|
cp INT(5) := 41927);
|
|||
|
TYPE EMP_DATA IS RECORD(
|
|||
|
id emp.empno%type,
|
|||
|
nombre emp.ename%type,
|
|||
|
sueldo emp.sal%type,
|
|||
|
loc LOC_DATA);
|
|||
|
empl EMP_DATA;
|
|||
|
CURSOR empls IS SELECT empno, ename, sal FROM emp;
|
|||
|
BEGIN
|
|||
|
OPEN empls;
|
|||
|
LOOP
|
|||
|
FETCH empls INTO empl.id, empl.nombre, empl.sueldo;
|
|||
|
EXIT WHEN empls%notfound;
|
|||
|
dbms_output.put_line('-----');
|
|||
|
dbms_output.put_line('Empleado número ' || empl.id);
|
|||
|
dbms_output.put_line('Nombre: ' || empl.nombre);
|
|||
|
dbms_output.put_line('Sueldo: ' || empl.sueldo);
|
|||
|
dbms_output.put_line('Referencia de localidad: ' || empl.loc.ref);
|
|||
|
dbms_output.put_line('Nombre de localidad: ' || empl.loc.localidad);
|
|||
|
dbms_output.put_line('Provincia de localidad: ' || empl.loc.provincia);
|
|||
|
dbms_output.put_line('Código postal de localidad: ' || empl.loc.cp);
|
|||
|
END LOOP;
|
|||
|
CLOSE empls;
|
|||
|
END;
|
|||
|
/
|