EJERCICIOS DE GESTION DE DASE DE DATOS
INDICE Contenido
Págs.
Índice……………….………………………………………….……1 Desarrollo EJERCICIOS PL/SQL 1. Variables y Entrada y Salida de Datos…………………..…..2 2. Variables, Bloques y Estructura de Control…...………..…...4 3. Cursores…………………………………………………………7 4. Procedimientos….…………………………………………..…13 Comentario.…..………………………………….………………. 15
Cesar Crespo
1
UNAQ
EJERCICIOS DE GESTION DE DASE DE DATOS 1. VARIABLES Y ENTRADA Y SALIDA DE DATOS 1.- Construya un bloque PL/SQL que pida al usuario su nombre por teclado y que posteriormente lo visualice de la siguiente forma “El nombre introducido es: NOMBRE”. DECLARE V_NOMBRE VARCHAR2(50); BEGIN V_NOMBRE:='&a'; DBMS_OUTPUT.PUT_LINE('EL NOMBRE INTRODUCIDO ES: '|| V_NOMBRE); END;
tabla para almacenar las personas de la BD CREATE TABLE Personas (dni VARCHAR2 (9) PRIMARY KEY, nombre VARCHAR2(15), edad NUMBER); Inserte los siguientes datos de prueba en la tabla PERSONAS: Dni nombre apellidos edad 11 Juan Álvarez 18 22 José Jiménez 22 33 Maria Pérez 35 44 Elena Martínez 20 select * from personas; insert into personas (dni,nombre,edad) values('11','Juan Álvarez',18); insert into personas(dni,nombre,edad) values('22','José Jiménez',22); insert into personas(dni,nombre,edad) values('33','Maria Pérez',35); insert into personas(dni,nombre,edad) values('44','Elena Martínez',20); 2.- Construya un bloque PL/SQL, que pida por teclado el dni de la persona y que posteriormente se muestre el nombre y la edad de la persona correspondiente. DECLARE V_DNI PERSONAS.DNI%TYPE; V_NOMBRE PERSONAS.NOMBRE%TYPE; V_EDAD PERSONAS.EDAD%TYPE; BEGIN V_DNI:=&a; SELECT NOMBRE,EDAD INTO V_NOMBRE,V_EDAD
Cesar Crespo
2
UNAQ
EJERCICIOS DE GESTION DE DASE DE DATOS FROM PERSONAS WHERE DNI=V_DNI; DBMS_OUTPUT.PUT_LINE('DNI: '|| V_DNI); DBMS_OUTPUT.PUT_LINE('NOMBRE: '|| V_NOMBRE); DBMS_OUTPUT.PUT_LINE('EDAD: '|| V_EDAD); EXCEPTION WHEN no_data_found then DBMS_OUTPUT.PUT_LINE('NO EXISTEN REGISTROS'); WHEN TOO_MANY_ROWS then DBMS_OUTPUT.PUT_LINE('LA CONSULTA RETORNA MAS DE UN REGISTRO'); WHEN OTHERS then DBMS_OUTPUT.PUT_LINE('SE DIO EL ERROR :'||SQLERRM); END;
3.- Construya un bloque PL/SQL con la misma funcionalidad pero utilizando un registro para almacenar el nombre y la edad de la persona elegida. DECLARE v_persona Personas%rowtype; v_cont varchar2(10); BEGIN DBMS_OUTPUT.PUT_LINE('Ingrese codigo DNI : '); v_cont:='&b'; SELECT NOMBRE,EDAD INTO v_persona.nombre,v_persona.edad FROM PERSONAS WHERE DNI=v_cont; DBMS_OUTPUT.PUT_LINE('NOMBRE: '||v_persona.nombre); DBMS_OUTPUT.PUT_LINE('EDAD: '||v_persona.edad); END;
Cesar Crespo
3
UNAQ
EJERCICIOS DE GESTION DE DASE DE DATOS
2. VARIABLES, BLOQUES Y ESTRUCTURAS DE CONTROL 1. Cree un bloque en el que se pida el nombre y la edad del usuario, se guarde en variables y posteriormente se muestre por pantalla su contenido. DECLARE v_nombre varchar2(100); v_edad number; BEGIN dbms_output.put_line('Ingrese Nombre: '); v_nombre:='&Nombre'; dbms_output.put_line('Ingrese Edad: '); v_edad:='&Edad'; dbms_output.put_line(''); dbms_output.put_line('DATOS ENCOTRADOS: '); dbms_output.put_line('NOMBRE : '||v_nombre); dbms_output.put_line('EDAD : '||v_edad); END;
2. Cree una tabla Tabla_Numeros con un atributo valor de tipo INTEGER. Cree un bloque que inserte números del 1 al 50. Compruebe los datos insertados en la tabla Tabla_Numeros. CREATE TABLE Tabla_Numeros (valor INTEGER); declare v_cont number(4); begin v_cont:=1; while v_cont <= 50 loop Insert into Tabla_Numeros(Valor) Values(v_cont); v_cont := v_cont +1; end loop; end;
Cesar Crespo
4
UNAQ
EJERCICIOS DE GESTION DE DASE DE DATOS
3. Borre el contenido de la tabla Tabla_Numeros utilizando la sentencia DELETE. Cree un bloque que inserte 8 elementos en la tabla con valores del 1 al 10, excepto el 4 y el 5. Compruebe, de nuevo, los datos que contiene la tabla Tabla_Numeros. BORRAR CONTENIDO DECLARE V_valor NUMBER:=1; BEGIN DELETE FROM TABLA_NUMEROS WHERE VALOR>=V_valor; END; INSERTO ELEMENTOS DECLARE BEGIN For X in 1..10 Loop If X not in(4,5)then Insert into Tabla_Numeros(Valor) Values(X); End if; End Loop; END; 4. Cree una tabla Tabla_Articulos con los siguientes atributos: código, nombre, precio e IVA. Introduzca datos de prueba utilizando la sentencia INSERT. CREATE TABLE Tabla_Articulos ( codigo VARCHAR(5) PRIMARY KEY, nombre VARCHAR(20), precio NUMBER(9,2), IVA NUMBER(9,2)); insert into Tabla_Articulos values('A001','TV 21',20,1); insert into Tabla_Articulos values('A002','RADIO',12,1); insert into Tabla_Articulos values('A003','COCINA',35,2); insert into Tabla_Articulos values('A004','REFRIGERADOR',2000,5); insert into Tabla_Articulos values('A005','SARTEN',5,0); a) Construya un bloque que compruebe si el precio del artículo cuyo código es ‘A001’ es mayor que 10 euros y en caso afirmativo, imprima el nombre y el precio del artículo por pantalla. DECLARE V_codigo varchar2(10); v_nombre varchar2(20); v_precio number; BEGIN v_codigo:='&a'; Select nombre,precio into v_nombre, v_precio from Tabla_Articulos where precio > 10 AND CODIGO =UPPER(v_codigo); dbms_output.put_line('EL ARTICULO ES : '||v_NOMBRE||', Y SU PRECIO ES $: '||v_PRECIO); END; b) Construya un bloque que seleccione el artículo de mayor precio que esté almacenado en la tabla, almacene su valor en una variable y luego imprímalo. DECLARE v_nombre varchar2(20); v_precio number; BEGIN
Cesar Crespo
5
UNAQ
EJERCICIOS DE GESTION DE DASE DE DATOS Select nombre,precio into v_nombre, v_precio from Tabla_Articulos where precio = (Select MAX(precio) From Tabla_Articulos); dbms_output.put_line('EL PRECIO MAS ALTO : $'||v_precio); dbms_output.put_line('ARTICULO : '||v_nombre); END; c) Construya un bloque que actualice el precio del artículo cuyo código es ‘A005’ según las siguientes indicaciones: − Si el artículo tiene un precio menor de 1 euro, su precio debe ser aumentado en 25 céntimos. − Si está comprendido entre 1 euro y 10 euros su precio aumentará un 10 % .Si excede los 10 euros su precio aumentará en un 20 %. − Si el precio es NULL, el aumento es 0. DECLARE v_codigo varchar2(10); v_nombre varchar2(20); v_precio number; mi_error exception; BEGIN v_codigo :='&a'; Select nombre,precio into v_nombre, v_precio from Tabla_Articulos where codigo =upper( v_codigo); dbms_output.put_line('ARTICULO: '||v_nombre); dbms_output.put_line('PRECIO: '||v_precio); If v_precio<1 then v_precio:=v_precio+0.25; Else if v_precio<10 then v_precio:=v_precio*1.10; Else if v_precio>10 then v_precio:=v_precio*1.20; End if; End if; End if; dbms_output.put_line('EL NUEVO PRECIO: '||v_precio); Update Tabla_Articulos set precio=v_precio where codigo='A005'; Commit; exception when mi_error then dbms_output.put_line('Codigo no existe'); END; d) Construya un bloque similar al del apartado 3c donde el usuario introduzca por pantalla el código del artículo que desee modificar su precio. DECLARE v_nombre varchar2(20); v_precio number; BEGIN Select nombre,precio into v_nombre, v_precio from Tabla_Articulos where codigo = '&CODIGO'; dbms_output.put_line('ARTICULO : '||v_nombre); dbms_output.put_line('PRECIO : '||v_precio); If v_precio<1 then v_precio:=v_precio+0.25; Else if v_precio<10 then v_precio:=v_precio*1.10;
Cesar Crespo
6
UNAQ
EJERCICIOS DE GESTION DE DASE DE DATOS Else if v_precio>10 then v_precio:=v_precio*1.20; End if; End if; End if; dbms_output.put_line('Su actual precio es : '||v_precio); END;
3. CURSORES. 1. Dadas las siguientes tablas: -- tabla para almacenar todos los alumnos de la BD CREATE TABLE Alumnos (numMatricula NUMBER PRIMARY KEY, nombre VARCHAR2(15), apellidos VARCHAR2(30), titulacion VARCHAR2(15), precioMatricula NUMBER); -- tabla para los alumnos de informática CREATE TABLE AlumnosInf (IDMatricula NUMBER PRIMARY KEY, nombre_apellidos VARCHAR2(50), precio NUMBER); Inserte los siguientes datos de prueba en la tabla ALUMNOS: insert into ALUMNOS values(1,'Juan','Álvarez','Administrativo',1000); insert into ALUMNOS values(2,'José','Jiménez','Informatica',1200); insert into ALUMNOS values(3,'Maria','Pérez','Administrativo',1000); insert into ALUMNOS values(4,'Elena','Martínez','Informatica',1200);
Construya un cursor que inserte sólo los alumnos de informática en la tabla ALUMNOSINF, teniendo en cuenta la estructura de esta tabla, así por ejemplo, debe tener en cuenta que el atributo nombre_apellidos resulta de la concatenación de los atributos nombre y apellidos. Antes de la inserción de cada tupla en la tabla ALUMNOSINF debe mostrar por pantalla el nombre y el apellido que va a insertar. DECLARE CURSOR ALUINF IS SELECT numMatricula, nombre, apellidos, titulacion, precioMatricula FROM Alumnos; BEGIN For X in ALUINF Loop If X.titulacion='Informatica' then dbms_output.put_line(X.nombre||' '||X.apellidos||' Dato Insertado'); Insert into AlumnosInf(IDMatricula, nombre_apellidos, precio) values(X.numMatricula,X.nombre||X.apellidos,X.precioMatricula); commit; End if; End Loop; END;
2. Dadas las siguientes tablas: CREATE TABLE Tabla_Departamento (Num_Depart Number(2) PRIMARY KEY, Nombre_Depart VARCHAR2(15),
Cesar Crespo
7
UNAQ
EJERCICIOS DE GESTION DE DASE DE DATOS Ubicación VARCHAR2(15), Presupuesto NUMBER(10,2), Media_Salarios NUMBER(10,2), Total_Salarios NUMBER(10,2)); CREATE TABLE Tabla_Empleado ( Num_Empleado Number(4) PRIMARY KEY, Nombre_Empleado VARCHAR(25), Categoría VARCHAR(10), -- Gerente, Comercial, Jefe Number(4), Fecha_Contratacion DATE, Salario Number(7,2), Comision Number(7,2), Num_Depart NUMBER(2), FOREIGN KEY (Jefe) REFERENCES Tabla_Empleado, FOREIGN KEY (Num_Depart) REFERENCES Tabla_Departamento); insert into TABLA_DEPARTAMENTO values(1,'FINANCIERO','CUENCA',1000,10,00); insert into TABLA_DEPARTAMENTO values(2,'ADMINISTRATIVO','QUITO',2000,12,00); insert into TABLA_DEPARTAMENTO values(3,'CONTABLE','CUENCA',500,10,00); insert into TABLA_DEPARTAMENTO values(4,'SISTEMAS','QUITO',200,12,00);
2.1 Construya un bloque que calcule el presupuesto del departamento para el año próximo. Se almacenará el mismo en la tabla Tabla_Departamento en la columna Presupuesto. Hay que tener en cuenta las siguientes subidas de sueldo: Gerente + 20% Comercial + 15% Los demás empleados que no estén en ninguna de las categorías anteriores se les subirá el sueldo un 10%. DECLARE CURSOR DEPAR IS SELECT num_depart,nombre_depart, presupuesto, media_salarios,total_salarios FROM tabla_departamento; CURSOR EMPLE (P_DEPT Tabla_departamento.num_depart%type)IS SELECT num_empleado, nombre_empleado, salario,categoría, num_depart FROM tabla_empleado WHERE num_depart=P_DEPT; v_total number:=0; v_salario number:=0; BEGIN FOR X IN DEPAR LOOP dbms_output.put_line(''); dbms_output.put_line(''); dbms_output.put_line('Departamento: '||X.nombre_depart); dbms_output.put_line('****************************************'); FOR Y IN EMPLE(X.num_depart) LOOP If Y.categoría='Gerente'then v_salario:=Y.salario*1.20; Else if Y.categoría='FINANCIERO'then v_salario:=Y.salario*1.15; Else v_salario:=Y.salario*1.10; End if; End if; v_total:=v_total+v_salario; END LOOP; dbms_output.put_line('Presupuesto: '||v_total); update Tabla_Departamento set presupuesto=v_total where num_depart=X.num_depart; commit; v_total:=0; END LOOP;
Cesar Crespo
8
UNAQ
EJERCICIOS DE GESTION DE DASE DE DATOS END;
2.2 Construya un bloque que actualice el campo Total_Salarios y el campo Media_Salarios de la tabla Tabla_Departamento, siendo el total la suma del salario de todos los empleados, igualmente con la media. Para ello: − Cree un cursor C1, que devuelva todos los departamentos − Cree un cursor C2, que devuelva el salario y el código de todos los empleados de su departamento. DECLARE CURSOR C1 IS SELECT num_depart,nombre_depart FROM tabla_departamento; CURSOR C2 (P_DEPT Tabla_departamento.num_depart%type)IS SELECT num_empleado, salario, categoría, num_depart FROM tabla_empleado WHERE num_depart=P_DEPT; v_SUMA number:=0; v_cont number:=0; MI_ERROR EXCEPTION; BEGIN FOR X IN C1 LOOP dbms_output.put_line('DEPARTAMENTO: '||X.nombre_depart); FOR Y IN C2(X.num_depart) LOOP v_SUMA:=v_SUMA+Y.salario; v_cont:=v_cont+1; END LOOP; dbms_output.put_line('Total Salarios: '||v_SUMA); dbms_output.put_line('Media Salarios: '||round((v_SUMA/v_cont),2)); update Tabla_Departamento set total_salarios= v_SUMA , media_salarios=round((v_SUMA/v_cont),2) where num_depart=X.num_depart; commit; v_SUMA:=0; v_cont:=0; END LOOP; EXCEPTION WHEN MI_ERROR THEN dbms_output.put_line('NO SE PIUEDE DIVIDIR PARA CERO'); WHEN OTHERS THEN dbms_output.put_line('NO SE PIUEDE DIVIDIR PARA CERO'); END;
2.3 Cree una tabla NOTAS con los atributos que estime necesarios y construya un bloque que inserte en la tabla NOTAS cuatro filas para cada alumno matriculado, estas filas corresponderán a las tres convocatorias ordinarias y la última para la convocatoria extraordinaria de junio. Antes de insertar se comprobará que no están ya creadas. Las filas deberán inicializarse a nulo. DECLARE CURSOR C1 IS
SELECT nummatricula FROM Alumnos;
BEGIN
Cesar Crespo
9
UNAQ
EJERCICIOS DE GESTION DE DASE DE DATOS FOR X IN C1 Loop FOR Y IN 1..4 LOOP Insert into Nota (cod_materia,descripcion, nota, nummatricula) values (null ,'Convocatoria '||Y,NULL,X.nummatricula); END LOOP; End Loop; END; select * from nota;
2.4 Cree un bloque que almacene en la tabla AUX_ARTICULOS (debe crearse previamente) un número dado de los artículos con mayor precio de los existentes en la tabla Tabla_Articulos. El número de artículos a almacenarse debe ser dado por teclado.
DECLARE CURSOR C1 IS SELECT * FROM Tabla_Articulos; v_valores number:=0; aux_codigo Tabla_Articulos.codigo%type; aux_nombre Tabla_Articulos.nombre%type; aux_precio Tabla_Articulos.precio%type; aux_iva Tabla_Articulos.iva%type; v_cont number:=0; BEGIN Delete Aux_Articulos; Delete Aux_Articulos1; v_valores:='&Cuantos' ; For X in C1 LOOP Insert into Aux_Articulos1(codigo,nombre,precio,iva) values(X.codigo,X.nombre,X.precio,X.iva); END LOOP; FOR Y IN 1..v_valores Loop Select codigo,nombre,precio,iva into aux_codigo, aux_nombre, aux_precio, aux_iva from Aux_Articulos1
Cesar Crespo
10
UNAQ
EJERCICIOS DE GESTION DE DASE DE DATOS where precio=
( select max(precio) from Aux_Articulos1); Insert into Aux_Articulos(codigo,nombre,precio,iva) values(aux_codigo, aux_nombre, aux_precio, aux_iva); Delete Aux_Articulos1 where codigo=aux_codigo; commit; End Loop; END;
2.5 Escriba un bloque que recupere todos los proveedores por países. El resultado debe almacenarse en una nueva tabla Tabla_Aux que permita almacenar datos del tipo: Proveedor: ONCE – País: España Utilice un cursor para recuperar cada país de la tabla Tabla_Proveedores y pasar dicho país a un cursor que obtenga el nombre de los proveedores en él. Una vez que se tiene el nombre del proveedor y su país, debe añadirse a la nueva tabla en el formato especificado. NOTA: En primer lugar, debe crear las tablas Tabla_Proveedores y Tabla_Aux e insertar en los mismos datos de prueba. create table proveedor(cod_prov number(4) primary key, nombre varchar2(25), pais varchar2(25)); insert into proveedor(cod_prov,nombre, pais)values(1,'ngk','Brasil' ); insert into proveedor(cod_prov,nombre, pais)values(2,'boch','Alemania' ); insert into proveedor(cod_prov,nombre, pais)values(3,'samsung','China' ); insert into proveedor(cod_prov,nombre, pais)values(4,'sony','Japon' ); insert into proveedor(cod_prov,nombre, pais)values(5,'intel','EEUU' ); insert into proveedor(cod_prov,nombre, pais)values(6,'canon','Japon' ); insert into proveedor(cod_prov,nombre, pais)values(7,'panasonic','Corea' ); select * from proveedor;
DECLARE CURSOR C1 IS SELECT DISTINCT(PAIS) FROM proveedor; CURSOR C2 (P_PAIS proveedor.pais%type) IS SELECT nombre FROM proveedor WHERE pais=P_PAIS; BEGIN FOR X IN C1 Loop dbms_output.put_line('PAIS: '||X.pais); FOR Y IN C2(X.pais) Loop dbms_output.put_line(Y.nombre); Insert into aux_proveedor(nombre,pais) values(Y.nombre,X.pais); End Loop;
Cesar Crespo
11
UNAQ
EJERCICIOS DE GESTION DE DASE DE DATOS End Loop; END;
Cesar Crespo
12
UNAQ
EJERCICIOS DE GESTION DE DASE DE DATOS
4. PROCEDIMIENTOS Y FUNCIONES ALMACENADOS. 1. Defina un procedimiento almacenado Mensaje que escriba un mensaje por pantalla. Cree posteriormente un bloque PL/SQL desde el que invoque dicho procedimiento. CREATE OR REPLACE procedure mensaje (mensaje in varchar2, men_sal out varchar2) is begin select mensaje into men_sal from dual; end mensaje; BLOQUE PL/SQL declare v_mensaje varchar2(50); v_mensaje_out varchar2(50); begin v_mensaje:='&a'; mensaje(v_mensaje,v_mensaje_out) ; dbms_output.put_line('ENVIO Y DEVOLUCION DE MENSAJE :'|| v_mensaje_out); end;
2. Defina un procedimiento almacenado Mostrar que reciba como parámetro de entrada un cadena de caracteres y que muestre dicha cadena. Cree posteriormente un bloque PL/SQL desde el que invoque dicho procedimiento pasándole una cadena que el usuario haya introducido por teclado. CREATE OR REPLACE PROCEDURE MOSTRAR( cadena VARCHAR2) AS cad VARCHAR2(50); CURSOR c_cliente IS SELECT nombre, cedula FROM cliente WHERE nombre LIKE cad; vr_cliente c_cliente%ROWTYPE; BEGIN cad :='%'||cadena||'%'; OPEN c_cliente; FETCH c_cliente INTO vr_cliente; WHILE (c_cliente%FOUND) LOOP DBMS_OUTPUT.PUT_LINE(vr_cliente.cedula||' * '||vr_cliente.nombre); FETCH c_cliente INTO vr_cliente; END LOOP; DBMS_OUTPUT.PUT_LINE('cliente: '|| c_cliente%ROWCOUNT); CLOSE c_cliente; END mostrar; Llamado procedimiento declare v_mensaje varchar2(50); begin v_mensaje:=upper('&a'); mostrar(v_mensaje); dbms_output.put_line('ENVIO Y DEVOLUCION DE MENSAJE :'|| v_mensaje); end;
Cesar Crespo
13
UNAQ
EJERCICIOS DE GESTION DE DASE DE DATOS 3. Defina un procedimiento para que inserte en la tabla Departamento (previamente creada) una fila con los tres valores que se le pasan por parámetro: código, nombre y localidad. Si el departamento que se le pasa por parámetro ya existe, se debe insertar en la tabla temporal (que también debe crear previamente). Cree posteriormente un bloque PL/SQL desde el que invoque dicho procedimiento pasándole los parámetros que desee insertar en la tabla. CREATE TABLE DEPARTAMENTO (codigo NUMBER(4) PRIMARY KEY, nombre VARCHAR2(25) NOT NULL UNIQUE, ciudad VARCHAR2(25)); desc temp_depar; insert into departamento(CODIGO,NOMBRE,CIUDAD)values(1,'sistemas','QUITO' ); insert into departamento(CODIGO,NOMBRE,CIUDAD)values(2,'ADMINISTRACION','GUAYAQUIL' ); insert into departamento(CODIGO,NOMBRE,CIUDAD)values(3,'CONTABILIDAD','QUITO' ); insert into departamento(CODIGO,NOMBRE,CIUDAD)values(4,'BODEGA','CUENCA' ); SELECT * FROM DEPARTAMENTO;
CREATE OR REPLACE procedure insertar1 (p_codigo in number, p_nombre in varchar2, p_localidad in varchar2, p_error out varchar2 ) is v_cont number(4):=0; reg departamento%rowtype; begin begin select * into reg from departamento where codigo = p_codigo; begin select count(p_codigo) into v_cont from departamento group by p_codigo having p_codigo = reg.codigo; exception when OTHERS then dbms_output.put_line('NO'||reg.codigo); end; if p_codigo = reg.codigo then insert into temp_depar values (p_codigo, p_nombre,p_localidad); else insert into departamento values (p_codigo, p_nombre,p_localidad); end if; exception when OTHERS then dbms_output.put_line('CODIGO ERRONEO'); end; end insertar1; LLAMADO AL PROCEDIMIENTO declare v_codigo departamento.codigo%type; v_nombre departamento.nombre%type; v_ciudad departamento.ciudad%type; v_error varchar2(250); begin v_codigo := &a; v_nombre := '&b'; v_ciudad := '&c'; insertar1(v_codigo,v_nombre,v_ciudad,v_error); end;
Cesar Crespo
14
UNAQ
EJERCICIOS DE GESTION DE DASE DE DATOS 4. Defina una función a la que le pasamos una convocatoria y nos devuelve el nombre de la asignatura con más suspensos. Para ello debe crear previamente una tabla Asignatura con los atributos: código y nombre y otra tabla Notas, que contiene el código de la asignatura, la convocatoria, el alumno y su nota. Cree posteriormente un bloque PL/SQL que visualice el nombre de la asignatura con más suspensos.
5. Defina una función que devuelva el factorial de un número que se le pasa a la función por parámetro. Cree posteriormente un bloque PL/SQL que visualice el resultado del factorial del número introducido por teclado. create or replace function factorial (p_numero in number) return number is begin if p_numero <=1 then return 1; else return p_numero*factorial(p_numero-1); end if; end factorial; llamada a la funcion declare v_numero number(10); begin v_numero :=&a; select factorial( v_numero) into v_numero from dual; dbms_output.put_line('factoria es ' || v_numero); end;
Cesar Crespo
15
UNAQ
EJERCICIOS DE GESTION DE DASE DE DATOS COMENTARIO.
Los programas realizados nos ayudan a desarrollarlo la habilidad de obtener datos que en su momento los utilizaremos en nuestra vida profesional, por otro lado nos ayudan a comprender lo aprendido en las clases anteriores. Este tipo de programas también nos ayuda a obtener información, validar información, en si nos ayudan a filtrar datos para al final poder obtener los resultados esperados. Con la correcta utilización de todos los comandos que se utilizan en el PL/SQL se pueden crear programas que ayudarían mucho a la administración de la información de Oracle. Recomiendo a usted Ing. Alex Freire que debe reforzar los temas últimos estudiados, ya que no fueron entendidos en su totalidad con las pocas horas de clase que tuvimos para tratar éstos temas, y aunque esto no es una justificación creo que hice mi mejor esfuerzo para poder realizar ésta tarea.
Cesar Crespo
16
UNAQ