Está en la página 1de 23

SMBD y SQL Avanzado

Administración de Base de Datos


Unidad I: SMBD y SQL Avanzado
Ejercicios Resueltos

Profesora: Crisbel Moreno

1
SMBD y SQL Avanzado

Índice de Contenido

Pág.
Presentación…………………………………………………………..………….. 03
1.- Programas almacenados en el esquema PSM……………….……………… 03
1.1.- Crear Tabla Estudiante……………………………...……….…….. 03
1.2.- Insertar Estudiantes………………………………………………... 04
1.3.- Listar estudiantes cuyo nombre tenga una letra dada……………. . 05
1.4.- Fecha de Ingreso………………………………………………….. 07
1.5.- Tabla libro…………………………………………………………. 08
1.6.- Registrar libro……………………………………………………... 09
1.7.- Precio de libros……………………………………………………. 10
1.8.- Editorial…………………………………………………………… 12
1.9.-Base de dato tienda………………………………………………… 13
1.10.- Insertar Fabricante……………………………………………….. 14
1.11.-Insertar Producto………………………………………………….. 15
Ejercicio propuestos…………………………………………………….. 15
2.- Funciones…………...……...…………………………………………………. 16
2.1.- Calcular precio mayor……………………………………………... 15
2.2.- Menor calificación………………………………………………… 17
2.3.- Promediar precios…………………………………………………. 18
2.4.- Sumar precios……………………………………………………… 19
3.- Estructuras de control……………………………………………………….. 20
3.1.- Bifurcación (if)…….………………………………………………. 20
3.2.- Case……………………………………………………………….. 21
3.3.- While…….………………………………………………………… 22

2
SMBD y SQL Avanzado

Presentación

A continuación se muestran algunos ejercicios desarrollados en donde plantean


elementos prácticos de procedimientos almacenados en el esquema, funciones y
estructuras de control. Todos los ejercicios están desarrollados bajo mysql, de tal
manera que pueden ser ejecutados en phpmyadmin.

1.-PROCEDIMIENTOS

EJERCICIO 1.1 Crear tabla Estudiante. Crear base de datos llamada ludovicoSilva,
seleccionar la base de datos y posteriormente desarrollar un procedimiento llamado
crearTablaEstudiante () que permita crear una tabla llamada estudiante con los campos
id INT, IdAula INT, nombre VARCHAR(30),apellido VARCHAR(30) y nota FLOAT

-- Definir el procedimiento en el entorno sql

DELIMITER //

-- Encabezado del procedimiento, no recibe nada

CREATE OR REPLACE PROCEDURE crearTablaEstudiante () NOT


DETERMINISTIC NO SQL SQL SECURITY DEFINER

-- Inicio del procedimiento

BEGIN

-- Sentencia sql para crear la tabla

CREATE TABLE estudiante( id int unsigned auto_increment, idAula varchar(40) not


null, nombre varchar(30), apellido varchar(30), fechaIngreso date, nota float,
primary key(id) );

-- Fin del procedimiento

END//

DELIMITER ;
Llamando al procedimiento por el entorno sql
CALL crearTablaEstudiante()

3
SMBD y SQL Avanzado

Resultado de llamar al procedimiento

Su consulta se ejecutó con éxito.


0 filas afectadas por la última sentencia del procedimiento.

CALL `crearTablaEstudiante`();

Resultados de la ejecución de la rutina `crearTablaEstudiante`

MySQL ha devuelto un conjunto de valores vacío (es decir: cero columnas).

Ejercicio 1.2. Insertar Estudiantes. Crear un procedimiento almacenado en el


esquema insertarEstudiante () que registre datos en la tabla estudiante

-- Definir el procedimiento

DELIMITER //

CREATE OR REPLACE PROCEDURE insertarEstudiante ()

BEGIN

-- Código sql para registrar datos

insert into estudiante (idAula,nombre,apellido,fechaIngreso,nota)


values(1,'Maria','Perez','2022-10-20','12.4');

insert into estudiante (idAula,nombre,apellido,fechaIngreso,nota)


values(5,'Carolina','Rojas','1999-03-01','11.63');

insert into estudiante (idAula,nombre,apellido,fechaIngreso,nota)


values(4,'Pedro','Sotillo','2002-30-03','11.63');

insert into estudiante (idAula,nombre,apellido,fechaIngreso,nota)


values(1,'Juan','Marquez','2002-02-01','10.27');

insert into estudiante (idAula,nombre,apellido,fechaIngreso,nota)


values(3,'Estela','Brito','2002-02-01','19.84');

insert into estudiante (idAula,nombre,apellido,fechaIngreso,nota)


values(1,'Sofia','Suarez','2002-11-01','17.36');

insert into estudiante (idAula,nombre,apellido,fechaIngreso,nota)


values(4,'Edgar','Malave','2002-10-01','15.35');

insert into estudiante (idAula,nombre,apellido,fechaIngreso,nota)


values(2,'Rodolfo','Rojas','2002-10-01','11.63');

END //

DELIMITER ;

4
SMBD y SQL Avanzado

Llamando al procedimiento
CALL insertarEstudiante ()

Resultado de llamar al procedimiento


Su consulta se ejecutó con éxito.
0 filas afectadas por la última sentencia del procedimiento.

CALL `insertarEstudiante`();

Resultados de la ejecución de la rutina `insertarEstudiante`

MySQL ha devuelto un conjunto de valores vacío (es decir: cero columnas).

Ejercicio 1.3. Listar estudiantes cuyo nombre tenga una letra dada. Realizar un
procedimiento llamado buscarLetra(IN letra CHAR(1)) que reciba una letra y permita
buscar a los estudiantes cuyo nombre contenga dicha letra.

-- Definir el procedimiento

DELIMITER //

CREATE OR REPLACE
PROCEDURE buscarLetra(IN letra CHAR(1)) NOT DETERMINISTIC NO SQL S
QL SECURITY DEFINER

BEGIN

SELECT * FROM estudiante WHERE nombre LIKE CONCAT ('%',letra,'%');

END//

DELIMITER ;

Llamando al procedimiento
SET @p0='a';
CALL buscarLetra(@p0);
Resultado del llamado del procedimiento

5
SMBD y SQL Avanzado

MySQL ha devuelto un conjunto de valores vacío (es decir: cero columnas). (La consulta tardó
0,0022 segundos.)

SET @p0='a'

[Editar en línea] [ Editar ] [ Crear código PHP ]

Mostrando filas 0 - 5 (total de 6, La consulta tardó 0,0044 segundos.)

CALL buscarLetra(@p0)

[Editar en línea] [ Editar ] [ Crear código PHP ]

25
|
Mostrar todo Número de filas: Filtrar filas:

+ Opciones

id idAula nombre apellido fechaIngreso nota


1 1 Maria Perez 2022-10-20 12.4

2 5 Carolina Rojas 1999-03-01 11.63

4 1 Juan Marquez 2002-02-01 10.27

5 3 Estela Brito 2002-02-01 19.84

6 1 Sofia Suarez 2002-11-01 17.36

7 4 Edgar Malave 2002-10-01 15.35

Otra manera de llamar al procedimiento


CALL buscarLetra('i')
Mostrando filas 0 - 2 (total de 3, La consulta tardó 0,0043 segundos.)

CALL buscarLetra('i')

[Editar en línea] [ Editar ] [ Crear código PHP ]

25
Mostrar todo| Número de filas:
Filtrar filas:

+ Opciones

id idAula nombre apellido fechaIngreso nota


1 1 Maria Perez 2022-10-20 12.4

2 5 Carolina Rojas 1999-03-01 11.63

6
SMBD y SQL Avanzado

id idAula nombre apellido fechaIngreso nota


6 1 Sofia Suarez 2002-11-01 17.36

Ejercicio 1.4. Fecha de Ingreso. Realizar un procedimiento llamado contarFecha(IN


fecha DATE, OUT cantidad INT UNSIGNED) que devuelva la cantidad de
estudiante cuya fecha de ingreso coincida con una fecha dada. Note que este
procedimiento recibe una variable de entrada fecha de tipo DATE en donde se recibe la
fecha que se desea cotejar y una variable de salida cantidad de tipo entero en donde se
devuelve la cantidad de registros que cumplan con la condición

-- Definición del procedimiento

DELIMITER //

CREATE OR REPLACE PROCEDURE contarFecha(IN fecha DATE, OUT


cantidad INT UNSIGNED)

BEGIN

-- SET permite asignar un valor a una variable

-- se le asigna el resultado de la sentencia sql a la variable cantidad

SET cantidad=(SELECT COUNT(*) FROM estudiante WHERE


fechaIngreso=fecha);

END //
DELIMITER ;
Llamado al procedimiento
/* A una variable @p0 se le asigna la fecha que se desea buscar, note que se le antepone al
nombre el operador@*/

SET @p0='2002-02-01';

/* Se llama el procedimiento con la sentencia CALL seguido del nombre del procedimiento,
dentro de paréntesis se le envía el parámetro de entrada @p0 y @p1 que es el parámetro de
salida, este último recibe la cantidad de coincidencias.*/

7
SMBD y SQL Avanzado

CALL contarFecha (@p0, @p1);

/* Se selecciona la variable de salida y se muestra como cantidad. As permite etiquetar una


variable.*/

SELECT @p1 AS cantidad;

Resultados de la ejecución de la rutina `contarFecha`

Mostrando filas 0 - 0 (total de 1, La consulta tardó 0,0422 segundos.)

/* Se selecciona la variable de salida y se muestra como cantidad. As


permite etiquetar una variable.*/

SELECT @p1 AS cantidad

Opciones

cantidad
2

Ejercicio 1.5. Tabla Libro. Crear una base de datos llamada biblioteca, seleccionar la
base de datos y crear un procedimiento crearTablaLibro () que permite crear una
tabla llamada libro
-- Definiendo el procedimiento

DELIMITER //

CREATE OR REPLACE PROCEDURE crearTablaLibro () NOT


DETERMINISTIC NO SQL SQL SECURITY DEFINER

BEGIN

CREATE TABLE libro( codigo int unsigned auto_increment, titulo varchar(40)


not null, autor varchar(30),

editorial varchar(15), precio decimal(5,2) unsigned, cantidad mediumint


unsigned, primary key (codigo));

END //

DELIMITER ;

8
SMBD y SQL Avanzado

Llamado al procedimiento
CALL crearTablaLibro()

Resultado de ejecutar procedimiento

MySQL ha devuelto un conjunto de valores vacío (es decir: cero columnas). (La consulta tardó
0,3954 segundos.)

CALL crearTablaLibro()

Ejercicio 1.6. Registrar libros. Realizar procedimiento para incluir registros en la tabla
libro

-- Definiendo el procedimiento

DELIMITER //

CREATE OR REPLACE PROCEDURE insertarLibros()

BEGIN

insert into libro (titulo,autor,editorial,precio,cantidad)

values('El aleph','Borges','Planeta',15,100);

insert into libro (titulo,autor,editorial,precio,cantidad)

values('Martin Fierro','Jose Hernandez','Emece',22.20,200);

insert into libro (titulo,autor,editorial,precio,cantidad)

values('Antologia poetica','J.L. Borges','Planeta',40,150);

insert into libro (titulo,autor,editorial,precio,cantidad)

values('Aprenda PHP','Mario Molina','Emece',18.20,200);

insert into libro (titulo,autor,editorial,precio,cantidad)

9
SMBD y SQL Avanzado

values('Cervantes y el quijote','Bioy Casares- J.L. Borges','Paidos',36.40,100);

insert into libro (titulo,autor,editorial,precio,cantidad)

values('Manual de PHP', 'J.C. Paez', 'Paidos',30.80,120);

insert into libro (titulo,autor,editorial,precio,cantidad)

values('Harry Potter y la piedra filosofal','J.K. Rowling','Paidos',45.00,50);

insert into libro (titulo,autor,editorial,precio,cantidad)

values('Harry Potter y la camara secreta','J.K. Rowling','Paidos',46.00,100);

insert into libro (titulo,autor,editorial,precio,cantidad)

values('Alicia en el pais de las maravillas','Lewis Carroll','Paidos',null,200);

END //

DELIMITER ;

Llamando al procedimiento
CALL insertarLibros()

Resultado de la ejecución de la consulta


MySQL ha devuelto un conjunto de valores vacío (es decir: cero columnas). (La consulta tardó
0,5396 segundos.)

CALL insertarLibros()

Ejercicio 1.7. Precios de los libros. Procedimiento preciosLibros() que retorna los
precios de todos los libros

-- definir el procedimiento

DELIMITER //

/* Crear o reemplazar el procedimiento preciosLibros() */

10
SMBD y SQL Avanzado

CREATE OR REPLACE PROCEDURE preciosLibros() NOT DETERMINISTIC


NO SQL SQL SECURITY DEFINER

BEGIN

-- seleccionar el campo precio de la tabla libro

SELECT(precio) FROM libro;

END//

DELIMITER ;

Llamado al procedimiento
CALL preciosLibros()

Resultado de la consulta

Mostrar ventana de consultas SQL

Mostrando filas 0 - 8 (total de 9, La consulta tardó 0,0040 segundos.)

CALL preciosLibros()

[Editar en línea] [ Editar ] [ Crear código PHP ]

25
|
Mostrar todo Número de filas: Filtrar filas:

+ Opciones

precio
15.00

22.20

40.00

18.20

36.40

30.80

45.00

11
SMBD y SQL Avanzado

precio
46.00

Ejercicio 1.8. Editorial. Realizar un procedimiento que devuelva la cantidad de libros


con Editorial dada

DELIMITER //

CREATE OR REPLACE PROCEDURE buscarEditorial(IN editorial


VARCHAR(15), OUT cantidad INT UNSIGNED) NOT DETERMINISTIC NO
SQL SQL SECURITY DEFINER

BEGIN

SET cantidad=(SELECT COUNT(*) FROM libro WHERE


libro.editorial=editorial);

END //

DELIMITER ;

Llamado al procedimiento

CALL buscarEditorial ('Paidos', @p1);

SELECT @p1 AS cantidad;

Resultado del llamado al procedimiento


MySQL ha devuelto un conjunto de valores vacío (es decir: cero columnas). (La consulta tardó
0,0052 segundos.)

CALL buscarEditorial ('Paidos', @p1)

[Editar en línea] [ Editar ] [ Crear código PHP ]

Mostrando filas 0 - 0 (total de 1, La consulta tardó 0,0471 segundos.)

SELECT @p1 AS cantidad

Perfilando

[Editar en línea] [ Editar ] [ Explicar SQL ] [ Crear código PHP ] [ Actualizar]

12
SMBD y SQL Avanzado

25
|
Mostrar todo Número de filas: Filtrar filas:

+ Opciones

cantidad
5

Ejercicio 1.9. Base de Dato tienda. Crear una base datos llamada tienda. Seleccionar
la base de datos y crear una tabla llamada fabricante y otra llamada producto

DELIMITER //

CREATE OR REPLACE PROCEDURE crearTablas ()

BEGIN

CREATE TABLE fabricante ( codigo INT UNSIGNED


AUTO_INCREMENT PRIMARY KEY, nombre VARCHAR(100) NOT NULL );

CREATE TABLE producto ( codigo INT UNSIGNED AUTO_INCREMENT


PRIMARY KEY, nombre VARCHAR(100) NOT NULL, precio DOUBLE NOT
NULL, codigo_fabricante INT UNSIGNED NOT NULL, FOREIGN KEY
(codigo_fabricante) REFERENCES fabricante(codigo) );
CREATE TABLE producto (
codigo INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
nombre VARCHAR(100) NOT NULL,
precio DOUBLE NOT NULL,
codigo_fabricante INT UNSIGNED NOT NULL,
FOREIGN KEY (codigo_fabricante) REFERENCES fabricante(codigo)
);
END //
DELIMITER ;

Llamando al procedimiento
CALL crearTablas ()

13
SMBD y SQL Avanzado

1.10. Insertar fabricantes. Crear un procedimiento que permita registrar datos en la


tabla fabricante

DELIMITER //
CREATE OR REPLACE PROCEDURE insertarFabricante()
BEGIN
INSERT INTO fabricante VALUES(1, 'Asus');
INSERT INTO fabricante VALUES(2, 'Lenovo');
INSERT INTO fabricante VALUES(3, 'Hewlett-Packard');
INSERT INTO fabricante VALUES(4, 'Samsung');
INSERT INTO fabricante VALUES(5, 'Seagate');
INSERT INTO fabricante VALUES(6, 'Crucial');
INSERT INTO fabricante VALUES(7, 'Gigabyte');
INSERT INTO fabricante VALUES(8, 'Huawei');
INSERT INTO fabricante VALUES(9, 'Xiaomi');
END //
DELIMITER ;

Llamado al procedimiento
CALL insertarFabricante ()

Resultado del llamado a al procedimiento


Su consulta se ejecutó con éxito.
0 filas afectadas por la última sentencia del procedimiento.

CALL `insertarFabricante`();

Resultados de la ejecución de la rutina `insertarFabricante`

MySQL ha devuelto un conjunto de valores vacío (es decir: cero columnas).

1.11. Insertar datos en la tabla producto

DELIMITER //
CREATE OR REPLACE PROCEDURE insertarProducto()
BEGIN

14
SMBD y SQL Avanzado

INSERT INTO producto VALUES(1, 'Disco duro SATA3 1TB', 86.99, 5);
INSERT INTO producto VALUES(2, 'Memoria RAM DDR4 8GB', 120, 6);
INSERT INTO producto VALUES(3, 'Disco SSD 1 TB', 150.99, 4);
INSERT INTO producto VALUES(4, 'GeForce GTX 1050Ti', 185, 7);
INSERT INTO producto VALUES(5, 'GeForce GTX 1080 Xtreme', 755, 6);
INSERT INTO producto VALUES(6, 'Monitor 24 LED Full HD', 202, 1);
INSERT INTO producto VALUES(7, 'Monitor 27 LED Full HD', 245.99, 1);
INSERT INTO producto VALUES(8, 'Portátil Yoga 520', 559, 2);
INSERT INTO producto VALUES(9, 'Portátil Ideapd 320', 444, 2);
INSERT INTO producto VALUES(10, 'Impresora HP Deskjet 3720', 59.99, 3);
INSERT INTO producto VALUES(11, 'Impresora HP Laserjet Pro M26nw',
180, 3);
END //
DELIMITER ;

Llamado del procedimiento

CALL insertarProducto()

Resultado de la llamada al procedimiento

CALL insertarProducto()

MySQL ha devuelto un conjunto de valores vacío (es decir: cero columnas). (La consulta tardó
1,1378 segundos.)

CALL insertarProducto()

Ejercicios propuestos de procedimientos

a.- Listar los nombres y las calificaciones de los estudiantes

b.- Lista los títulos y los precios de todos los libros de la tabla libro, convirtiendo los
nombres a mayúscula.

c.- Lista los nombres y los precios de todos los productos de la tabla producto,
redondeando el valor del precio

15
SMBD y SQL Avanzado

d.- Lista el código de los fabricantes que tienen productos en la tabla producto

e.- Lista los nombres de los fabricantes ordenados de forma ascendente

f.- Lista los nombres de los fabricantes ordenados de forma descendente

g.- Lista todos los productos que tengan un precio entre 80 y 300.

h.- Devuelve una lista con el nombre, precio y nombre de fabricante de todos los
productos de la base de datos. Ordene el resultado por el nombre del fabricante, por
orden alfabético.

2.- FUNCIONES
2.1. Calcular el precio mayor.

DELIMITER //

CREATE OR REPLACE FUNCTION precioMayor() RETURNS DOUBLE

BEGIN

DECLARE x DOUBLE;

SET x=(SELECT MAX(precio) FROM producto);

RETURN x;

END //

DELIMITER ;

Llamando a la función

SELECT `precioMayor`() AS `precioMayor`;

Resultado del llamado de la función

Su consulta se ejecutó con éxito.

SELECT `precioMayor`() AS `precioMayor`;

Resultados de la ejecución de la rutina `precioMayor`

precioMayor
755

También lo podemos hacer de la siguiente manera

16
SMBD y SQL Avanzado

DELIMITER //

CREATE OR REPLACE FUNCTION precioMayor() RETURNS DOUBLE

BEGIN

DECLARE x DOUBLE;

/* La función MAX de mysql retorna el mayor valor, le pasamos como parámetro


el campo que se desea avaluar */

RETURN (SELECT MAX(precio) FROM producto);

END //

DELIMITER ;

Llamando a la función

SELECT `precioMayor`() AS `precioMayor`;

Resultado del llamado de la función

Su consulta se ejecutó con éxito.

SELECT `precioMayor`() AS `precioMayor`;

Resultados de la ejecución de la rutina `precioMayor`

precioMayor
755

2.2.- Menor Calificación. Mostrar la menor calificación de la tabla estudiante


(Seleccionar Base de datos ludovicosilva)

DELIMITER //

CREATE OR REPLACE FUNCTION notaMenor() RETURNS DOUBLE

BEGIN

DECLARE x DOUBLE;

/* La función MIN de mysql retona el menor valor, le pasamos como parámetro el


campo que se desea avaluar */

SET x=(SELECT MIN(nota) FROM estudiante);

17
SMBD y SQL Avanzado

RETURN x;

END //

DELIMITER ;

Llamando a la función notaMenor()


SELECT `notaMenor`() AS `Nota más baja`;

Resultado de ejecutar la función


Mostrando filas 0 - 0 (total de 1, La consulta tardó 0,0716 segundos.)

SELECT `notaMenor`() AS `Nota mas baja`

Perfilando

[Editar en línea] [ Editar ] [ Explicar SQL ] [ Crear código PHP ] [ Actualizar]

25
Mostrar todo| Número de filas:
Filtrar filas:

+ Opciones

Nota más baja


10.270000457763672

2.3.- Promediar precios. Promediar los precios de los productos. (Seleccionar la base
de datos tienda)
DELIMITER //

CREATE OR REPLACE FUNCTION promedioPrecio() RETURNS DOUBLE

BEGIN

DECLARE x DOUBLE;

/* La función AVG de mysql el promedio, le pasamos como parámetro el campo


que se desea avaluar */

SET x=(SELECT AVG(precio) FROM producto);

RETURN x;

END //

DELIMITER ;

18
SMBD y SQL Avanzado

Llamando a la función
SELECT promedioPrecio() AS `Promedio Precio`;

Resultado de ejecutar la función


Mostrando filas 0 - 0 (total de 1, La consulta tardó 0,0074 segundos.)

SELECT promedioPrecio() AS `Promedio Precio`

Perfilando

[Editar en línea] [ Editar ] [ Explicar SQL ] [ Crear código PHP ] [ Actualizar]

25
Mostrar todo| Número de filas:
Filtrar filas:

+ Opciones

Promedio Precio
271.7236363636364

2.4.- Suma de precios. Mostrar el total de la sumatoria de los precios productos


registrados en la tienda
DELIMITER //

CREATE OR REPLACE FUNCTION sumaPrecio() RETURNS DOUBLE

BEGIN

DECLARE x DOUBLE;

/* La función SUM de mysql SUMA, le pasamos como parámetro el campo que se


desea avaluar y elle retonará la sumatoria de los datos que estén en dicho campo */

SET x=(SELECT SUM(precio) FROM producto);

RETURN x;

END //

DELIMITER ;

Llamando a la función
SELECT sumaPrecio() AS `Suma de Precios`;

Resultado de llamar a la función

Mostrar ventana de consultas SQL

19
SMBD y SQL Avanzado

Mostrando filas 0 - 0 (total de 1, La consulta tardó 0,0318 segundos.)

SELECT sumaPrecio() AS `Suma de Precios`

Perfilando

[Editar en línea] [ Editar ] [ Explicar SQL ] [ Crear código PHP ] [ Actualizar]

25
|
Mostrar todo Número de filas: Filtrar filas:

+ Opciones

Suma de Precios
2988.96

3.- Estructuras de Control


3.1.- Bifurcación (if). Determinar si el precio de un producto es baja o alta

DELIMITER //

CREATE FUNCTION tipoPrecio (precio DOUBLE)

RETURNS varchar(10)

BEGIN

DECLARE a VARCHAR(10);

IF precio>40 then

RETURN 'ALTO';

ELSE

RETURN 'BAJO';

END IF;

END //

DELIMITER ;

20
SMBD y SQL Avanzado

Llamando a la función
SET @p0='80';
SELECT `tipoPrecio`(@p0) AS `tipoPrecio`;

Resultado de la función
tipoPrecio
ALTO

3.2 CASE. Verificar si una nota dada es baja, media o alta

DELIMITER //

CREATE OR REPLACE FUNCTION tipoNota(nota float)

RETURNS VARCHAR(30)

BEGIN

DECLARE tipo VARCHAR(30);

CASE

WHEN nota<10.00 THEN

SET tipo='baja';

WHEN nota<15.00 THEN

SET tipo='media';

ELSE

SET tipo='alta';

END CASE;

RETURN tipo;

END //

DELIMITER ;

21
SMBD y SQL Avanzado

Llamado la función
SELECT tipoNota(12.45);

Resultado de llamar a la función

Mostrar ventana de consultas SQL

Mostrando filas 0 - 0 (total de 1, La consulta tardó 0,0133 segundos.)

SELECT tipoNota(12.45)

Perfilando

[Editar en línea] [ Editar ] [ Explicar SQL ] [ Crear código PHP ] [ Actualizar]

25
|
Mostrar todo Número de filas: Filtrar filas:

+ Opciones

tipoNota(12.45)
media

3.3. WHILE. Calcular factiorial


DELIMITER //
CREATE FUNCTION factorial(num int)
RETURNS int(11)
BEGIN
declare total,cont int default 1;

while cont<=num do
set total=total*cont;
set cont=cont+1;
end while;

RETURN total;
END //
DELIMITER ;

Llamado a la función
SELECT factorial(2);

Resultado del llamado a la función


Mostrar ventana de consultas SQL

Mostrando filas 0 - 0 (total de 1, La consulta tardó 0,0352 segundos.)

SELECT factorial(2)

22
SMBD y SQL Avanzado

Perfilando

[Editar en línea] [ Editar ] [ Explicar SQL ] [ Crear código PHP ] [ Actualizar]

25
|
Mostrar todo Número de filas: Filtrar filas:

+ Opciones

factorial(2)
2

Ejercicios propuestos de funciones y estructuras de control


a.- Calcular el iva de un producto dado. La función deberá recibir el código o id del
producto y regresar el monto por iva. (Base de dato tienda)
b.- Aumentar el 20% del precio a los productos cuyo precio sea menor a 120. (Base de
dato tienda)
c.- Mostrar el nombre del fabricante de acuerdo a un código dado. (Base de dato tienda)
d.- Mostrar la cantidad de productos de un fabricante dado
e.- Dado un código de producto clasificarlo en dispositivos de entrada, salida o
almacenamiento. Por ejemplo si se trata de un monitor mostrar ‘Dispositivo de entrada’,
si se trata de una impresora mostrar ‘Dispositivo de salida’, si se trata de una memoria y
de un disco mostrar ‘Dispositivo de almacenamiento’

23

También podría gustarte