1. Funciones SGBD Consulta y actualización de datos · 3. Permisos MYSQL ... todos los campos...

29
1. Funciones SGBD Las funciones provistas por un SGBD pueden agruparse en tres clases: Consulta y actualización de datos Mantenimiento de esquemas Manejo de transacciones Consulta y Actualización Ésta es la clase más básica de funciones y la única que es visible "desde afuera". Consiste en un conjunto de herramientas que permite a los distintos tipos de usuarios del SGBD extraer, manipular y modifica la información almacenada en la base de datos. Mantenimiento de esquemas El esquema de la base de datos es la descripción de la estructura de la información almacenada en ella. Por ejemplo, para un sistema basado en tablas, el esquema puede consistir en una lista de tablas en uso, los campos que contienen, el tipo de datos de cada campo, descripciones en lenguaje natural del propósito de cada tabla y cada campo, y restricciones sobre los valores admisibles en cada campo. Manejo de Transacciones Una de las áreas principales de aplicación de los sgbd's es lo que se llama procesamiento de transacciones. Una transacción es un programa de aplicación, generalmente de duración breve, que accede y actualiza una parte también generalmente pequeña de la base de datos. Típicos ejemplos son un depósito o extracción de una cuenta bancaria, o una reservación en un vuelo, o una verificación de una tarjeta de crédito. 2. Logs Archivo de registro Tipo de información registrado en el archivo El registro de error Registra problemas encontrados iniciando, ejecutando, o parando mysqld. El registro de consultas Registra las conexiones de clientes establecidas, y las sentencias ejecutadas. El registro de actualizaciones The update log Registra las sentencias que cambian datos. Este registro está ya en desuso. El registro binario Registra todas las sentencias que cambian datos. También utilizado para replicación. El registro de lentitud Registra todas las sentencias que tardarón más de long_query_time segundos en ejecutarse, o no utilizaron índices.

Transcript of 1. Funciones SGBD Consulta y actualización de datos · 3. Permisos MYSQL ... todos los campos...

Page 1: 1. Funciones SGBD Consulta y actualización de datos · 3. Permisos MYSQL ... todos los campos relacionados con una tabla, ... La arquitectura de tres capas El objetivo de la arquitectura

1. Funciones SGBD

Las funciones provistas por un SGBD pueden agruparse en tres clases:

Consulta y actualización de datos

Mantenimiento de esquemas

Manejo de transacciones

Consulta y Actualización

Ésta es la clase más básica de funciones y la única que es visible "desde afuera".

Consiste en un conjunto de herramientas que permite a los distintos tipos de

usuarios del SGBD extraer, manipular y modifica la información almacenada en la

base de datos.

Mantenimiento de esquemas

El esquema de la base de datos es la descripción de la estructura de la

información almacenada en ella. Por ejemplo, para un sistema basado en tablas, el

esquema puede consistir en una lista de tablas en uso, los campos que contienen, el

tipo de datos de cada campo, descripciones en lenguaje natural del propósito de

cada tabla y cada campo, y restricciones sobre los valores admisibles en cada

campo.

Manejo de Transacciones

Una de las áreas principales de aplicación de los sgbd's es lo que se llama

procesamiento de transacciones. Una transacción es un programa de aplicación,

generalmente de duración breve, que accede y actualiza una parte también

generalmente pequeña de la base de datos. Típicos ejemplos son un depósito o

extracción de una cuenta bancaria, o una reservación en un vuelo, o una verificación

de una tarjeta de crédito.

2. Logs

Archivo de registro Tipo de información registrado en el archivo

El registro de error Registra problemas encontrados iniciando, ejecutando, o

parando mysqld.

El registro de consultas Registra las conexiones de clientes establecidas, y las

sentencias ejecutadas.

El registro de actualizaciones The update log Registra las sentencias que

cambian datos. Este registro está ya en desuso.

El registro binario Registra todas las sentencias que cambian datos. También

utilizado para replicación.

El registro de lentitud Registra todas las sentencias que tardarón más de

long_query_time segundos en ejecutarse, o no utilizaron índices.

Page 2: 1. Funciones SGBD Consulta y actualización de datos · 3. Permisos MYSQL ... todos los campos relacionados con una tabla, ... La arquitectura de tres capas El objetivo de la arquitectura

3. Permisos MYSQL

Privilegios para los usuarios SELECT- Selecciona los registros de la tabla/s

INSERT- Insertar registro en la tabla/s

UPDATE- Actualizar datos ya existentes en la tabla/s

ALTER- Modificar la estructura de la tabla/s

CREATE- Crear nuevas tablas, bases datos.

DROP- Eliminar tablas o BD

Privilegios los de administradores. FILE- Permite al admin leer y gravar achivos en el server mySQL

PROCESS- Permite al administrador controlar los procesos.

RELOAD- Permite al administrador reformar los acesos,privilegios...

SHUTDOWN- Permite al admin apagar el servidor

Privilegios especiales que són: ALL- Todos los privilegios comentadas anteriormente

USAGE- Permite el acceso.

4. Un diccionario de datos de Mysql es una base de datos donde se almacenan

todos los campos relacionados con una tabla, además de los usuarios a los

que se vinculan. Contienen todas las tablas, estructuras y datos que tenemos

en una tabla.

5. Arquitectura SGBD

La arquitectura de tres capas

El objetivo de la arquitectura de tres esquemas consiste en formar una separación

entre las aplicaciones del usuario y la base de datos física. En esta arquitectura,

los esquemas se pueden definir en los tres niveles siguientes:

El nivel interno tiene un esquema interno, que describe la estructura física de

almacenamiento de la base de datos. El esquema interno emplea un modelo físico de

los datos y describe todos los detalles para su almacenamiento, así como los

caminos de acceso para la base de datos

El nivel conceptual tiene un esquema conceptual, que describe la estructura de

toda la base de datos para una comunidad de usuarios. El esquema conceptual

oculta los detalles de las estructuras físicas de almacenamiento y se concentra en

describir entidades, tipos de datos, vínculos, operaciones de los usuarios y

restricciones. En este nivel podemos usar un modelo de datos de alto nivel o uno de

implementación

Page 3: 1. Funciones SGBD Consulta y actualización de datos · 3. Permisos MYSQL ... todos los campos relacionados con una tabla, ... La arquitectura de tres capas El objetivo de la arquitectura

El nivel externo o de vistas incluye varios esquemas externos o vistas de usurio.

Cada esquema externo describe la parte de la base de datos que interesa a un

grupo de usuarios determinado, y oculta a ese grupo el resto de la base de datos.

En este nivel podemos usar un modelo de datos de alto nivel o uno de

implementación

1 – crea un usuario llamado contable con clave inves que puede insertar, borrar y

actualizar registros en las tablas apuntes y cuentas en la base de datos

contabilidad se conectan desde el equipo 192.168.100.151.

GRANT PRIVILEGIOS ON BASE DATOS.TABLAS TO “usuario”@”lugar”

INDENTIFIED BY “contraseña” WITH GRANT OPTIONS;

FLUSH PRIVILEGES;

GRANT insert, delete, update ON contabilidad.apuntes TO

“contable”@”192.168.100.151” INDENTIFIED BY “inves” WITH GRANT

OPTIONS;

FLUSH PRIVILEGES;

GRANT insert, delete, update ON contabilidad.cuentas TO

“contable”@”192.168.100.151” INDENTIFIED BY “inves” WITH GRANT

OPTIONS;

FLUSH PRIVILEGES;

GRANT INSERT, DELETE, UPDATE ON CONTABILIDAD.CUENTAS TO

“CONTABLE”@”%” INDENTIFIED BY “INVES” WITH GRANT OPTIONS; --------

--------------> EL % ES PARA QUE PUEDAN CONECTARSE TODOS LOS

EQUIPOS, EJEMPLO EJERCICIO 2.

FLUSH PRIVILEGES;

CREAR USUARIO SIN PRIVILEGIOS CREATE USER “USUARIO”@”LUGAR”

INDENFIED BY “CONTRASEÑA” WITH GRANT OPTIONS;

ELIMINAR USUARIOS DROP USER NOMBREUSUARIO;

QUITAR PERMISOS REVOKE PRIVILEGIOS ON BASE DATOS.TABLAS

FROM “USUARIO”@”LUGAR”

FLUSH PRIVILEGES;

MODIFICA CONTRASEÑA SET PASSWORD FOR “USUARIO”@”LUGAR” =

MD5 O PASSWORD (“INVES”);

1.

Page 4: 1. Funciones SGBD Consulta y actualización de datos · 3. Permisos MYSQL ... todos los campos relacionados con una tabla, ... La arquitectura de tres capas El objetivo de la arquitectura

mysql -u root -pinves -e "show variables;">todas_las_variables.txt

mysql -u root -pinves -e "show variables like

'%InnoDB%';">todas_las_variables_innodb.txt

2. kill

mysql> show processlist;

+----+------+-----------+------+---------+------+-------+------------------+

| Id | User | Host | db | Command | Time | State | Info |

+----+------+-----------+------+---------+------+-------+------------------+

| 68 | root | localhost | NULL | Query | 0 | NULL | show processlist |

| 71 | root | localhost | NULL | Sleep | 7 | | NULL |

+----+------+-----------+------+---------+------+-------+------------------+

2 rows in set (0.00 sec)

mysql> kill 71;

Query OK, 0 rows affected (0.00 sec)

mysql> show processlist;

+----+------+-----------+------+---------+------+-------+------------------+

| Id | User | Host | db | Command | Time | State | Info |

+----+------+-----------+------+---------+------+-------+------------------+

| 68 | root | localhost | NULL | Query | 0 | NULL | show processlist |

+----+------+-----------+------+---------+------+-------+------------------+

1 row in set (0.00 sec)

3.

Page 5: 1. Funciones SGBD Consulta y actualización de datos · 3. Permisos MYSQL ... todos los campos relacionados con una tabla, ... La arquitectura de tres capas El objetivo de la arquitectura

4.

poniendo set no se puede.

cambiando del fichero de configuracion /etc/mysql/my.cnf

/mysql.ini ????

Arrancando el servidor manualmente con opciones varias

5.

tiempo en segundos desde que se inicio el servidor.

show status like "uptime";

no se puede

SELECT * FROM information_schema.`GLOBAL_STATUS` where

variable_name="uptime";

+---------------+----------------+

| VARIABLE_NAME | VARIABLE_VALUE |

+---------------+----------------+

| UPTIME | 2561 |

+---------------+----------------+

1 row in set (0.00 sec)

Page 6: 1. Funciones SGBD Consulta y actualización de datos · 3. Permisos MYSQL ... todos los campos relacionados con una tabla, ... La arquitectura de tres capas El objetivo de la arquitectura

update information_schema.`GLOBAL_STATUS` set variable_value=25 where

variable_name="uptime";

ERROR 1044 (42000): Access denied for user 'root'@'localhost' to database

'information_schema'

3.2

1.

create user admin@localhost;

set password for admin@localhost=password("admin");

grant all privileges on *.* to admin@localhost;

2.

opcion 1

revoke super, grant on *.* from admin@localhost;

opcion 2

update mysql.user set Super_priv="N" where user=admin and host=localhost;

update mysql.user set Grant_priv="N" where user=admin and host=localhost;

flush privileges;

opcion 3:

update mysql.user set Super_priv="N", Grant_priv="N" where user=admin and

host=localhost;

flush privileges;

opcion 4:

mysqladmin, modificar las columnas y luego flush

Page 7: 1. Funciones SGBD Consulta y actualización de datos · 3. Permisos MYSQL ... todos los campos relacionados con una tabla, ... La arquitectura de tres capas El objetivo de la arquitectura

3.

grant all privileges on ebanca.* to admin_ebanca@"www.guara.com";

no dar privilegios:

grant usage on ebanca.* to admin_ebanca@"www.guara.com";

4. no encripta la contraseña, p.e. "inves". y cuando la escribamos en el cliente, no se

podra acceder porque el programa p.e. mysql si la encripta

("*CDAD9978C4EB14E930F814E485EC9EC72F73185A") y no coincide.

5.

los administrativos: grant, shutdown, super, alter, drop

6. son diferentes funciones para encriptar información

select password("palabra");

+-------------------------------------------+

| password("palabra") |

+-------------------------------------------+

| *630DB5E966E9CC85063B48608823CE32EC255BE2 |

+-------------------------------------------+

1 row in set (0.00 sec)

select md5("palabra");

Page 8: 1. Funciones SGBD Consulta y actualización de datos · 3. Permisos MYSQL ... todos los campos relacionados con una tabla, ... La arquitectura de tres capas El objetivo de la arquitectura

+----------------------------------+

| md5("palabra") |

+----------------------------------+

| d585c75f67ab4327ae31b88879f6e7c6 |

+----------------------------------+

1 row in set (0.00 sec)

grant all privileges on limpioj3.* to joomla@localhost identified by "inves";

grant all privileges on foro.* to uforo@localhost identified by "inves";

insert into mysql.user (Host, User, Password) values ("localhost", "miguel", "inves");

UPDATE `mysql`.`user` SET `Password` = PASSWORD( 'inves' ) WHERE

`user`.`Host` = 'localhost' AND `user`.`User` = 'miguel';

grant all privileges on *.* to antonio@localhost identified by "inves";

grant all privileges on *.* to antonio@localhost identified by "inves" with grant

option;

grant select, insert on *.* to lolo@localhost identified by "inves" with grant option;

INSERT INTO mysql.user VALUES( 'localhost' ,'antonio' , PASSWORD('sierra'),

'y' , 'y' , 'y' , 'y' ,'Y', "y" ,'Y', "y", "y" , 'Y', "y", "y" , 'Y' , 'Y' ) ;

INSERT INTO mysql.user (Host, User, Password,

Select_priv,Insert_priv,Update_priv,Delete_priv,Create_priv,Drop_priv) VALUES

('localhost', 'pedro', PASSWORD ("sierra"),"Y","Y","Y","Y","Y","Y");

Page 9: 1. Funciones SGBD Consulta y actualización de datos · 3. Permisos MYSQL ... todos los campos relacionados con una tabla, ... La arquitectura de tres capas El objetivo de la arquitectura

REVOKE ALL PRIVILEGES ON notas . * FROM amin_mblog@localhost

REVOKE insert ON *.* FROM pedro1@localhost;

REVOKE insert ON ebanca.* FROM angel@"%";

GRANT ALL ON *.* TO angel@'localhost' WITH MAX_QUERIES_PER_HOUR 1

MAX_UPDATES_PER_HOUR 1

MAX_CONNECTIONS_PER_HOUR 1

MAX_USER_CONNECTIONS 1;

grant usage on *.* to pedro@localhost identified by "inves";

DELIMITER //

drop procedure proc5//

CREATE PROCEDURE proc5 ()

BEGIN

DECLARE x1 CHAR(5) DEFAUlT 'fuera';

DECLARE x1 CHAR(5) DEFAUlT 'fuera';

DECLARE x2 CHAR(5) DEFAUlT 'dos';

Page 10: 1. Funciones SGBD Consulta y actualización de datos · 3. Permisos MYSQL ... todos los campos relacionados con una tabla, ... La arquitectura de tres capas El objetivo de la arquitectura

SELECT x1 "primero";

BEGIN

DECLARE x1 CHAR(5) DEFAULT 'dentro';

SELECT x1 "dentro del 2do begin";

SELECT x2 "dentro del 2do begin";

ENd;

SELECT x1 "final fuera";

END; //

delimiter //

drop procedure proc8//

CREATE PRoCEDURE proc8(IN p INT)

BEGIN

CASE p

WHEN 0 THEN select "cero";

WHEN 1 THEN select "uno";

WHEN 2 THEN select "dos";

WHEN 3 THEN select "tres";

WHEN 4 THEN select "cuatro";

WHEN 5 THEN select "cinco";

ELSE select "no se no se";

END CASE;

END;//

-----

delimiter //

drop procedure proc9//

CREATE PRoCEDURE proc9(IN p INT)

BEGIN

IF p= 0 THEN select "cero";

ELSEIF p= 1 THEN select "uno";

Page 11: 1. Funciones SGBD Consulta y actualización de datos · 3. Permisos MYSQL ... todos los campos relacionados con una tabla, ... La arquitectura de tres capas El objetivo de la arquitectura

ELSEIF p= 2 THEN select "dos";

ELSEIF p= 3 THEN select "tres";

ELSEIF p= 4 THEN select "cuatro";

ELSEIF p= 5 THEN select "cinco";

ELSE select "no se no se";

END IF;

END;//

DELIMITER //

drop function divisible//

CREATE FUNCTION divisible (num1 INT, num2 INT)

RETURNS int deterministic

BEGIN

DECLARE divisible int default 1;

if num2 <>0 then

if MOD(num1,num2) then SET divisible = 0;

END IF;

else

set divisible=-1;

end if;

RETURN(divisible);

END;//

----------------------------------------------------------

EJERCICIO~~2

DELIMITER //

DROP PROCEDURE IF EXISTS SEMANA //

CREATE PROCEDURE SEMANA (IN DIA INT)

BEGIN

CASE DIA

WHEN 1 THEN SELECT "DOMINGO";

WHEN 2 THEN SELECT "LUNES";

Page 12: 1. Funciones SGBD Consulta y actualización de datos · 3. Permisos MYSQL ... todos los campos relacionados con una tabla, ... La arquitectura de tres capas El objetivo de la arquitectura

WHEN 3 THEN SELECT "MARTES";

WHEN 4 THEN SELECT "MIERCOLES";

WHEN 5 THEN SELECT "JUEVES";

WHEN 6 THEN SELECT "VIERNES";

WHEN 7 THEN SELECT "SABADO";

ELSE SELECT "NUMERO NO VALIDO";

END CASE;

END;

//

DELIMITER //

CREATE FUNCTION dias (dia INT)

RETURNS VARCHAR(100) deterministic

BEGIN

DECLARE nombredia VARCHAR(100);

IF dia IS NOT NULL AND ( dia < 8 OR dia >= 0) THEN

CASE dia

WHEN 0 THEN

SET nombredia = 'Domingo';

WHEN 1 THEN

SET nombredia = 'Lunes';

WHEN 2 THEN

SET nombredia = 'Martes';

WHEN 3 THEN

SET nombredia = 'Miercoles';

WHEN 4 THEN

SET nombredia = 'Jueves';

WHEN 5 THEN

SET nombredia = 'Viernes';

WHEN 6 THEN

SET nombredia = 'Sabado';

ELSE

SET nombredia = 'nope';

END CASE;

ELSE

SET nombredia = 'nope';

END IF;

RETURN(nombredia);

END;//

Page 13: 1. Funciones SGBD Consulta y actualización de datos · 3. Permisos MYSQL ... todos los campos relacionados con una tabla, ... La arquitectura de tres capas El objetivo de la arquitectura

CREATE FUNCTION divisible (num1 INTEGER, num2 INTEGER)

RETURNS VARCHAR(50);

BEGIN

DECLARE divisible VARCHAR(100);

IF num1 > 0 AND num2 > 0 THEN

IF MOD(num1,num2) = 0 THEN

SET divisible = 1;

ELSE

SET divisible = 0;

END IF;

ELSE

SET divisible = 'nei'

END IF;

RETURN(divisible);

END;//

Page 14: 1. Funciones SGBD Consulta y actualización de datos · 3. Permisos MYSQL ... todos los campos relacionados con una tabla, ... La arquitectura de tres capas El objetivo de la arquitectura

---------------------Sobre la base de datos liga crea una función que devuelva 1 si

ganó el visitante y O en caso contrario. El parámetro de entrada es el resultado

con el formato 'xxx-xxx'.-------------------------

drop function liga.ganavisitante//

delimiter //

create function liga.ganavisitante(a varchar(7)) returns int deterministic

begin

declare ganador int;

declare valor1 int;

declare valor2 int;

set valor1=substring_index(a,"-",1);

set valor2=substring_index(a,"-",-1);

if valor1 >= valor2 then set ganador=0;

else set ganador=1;

end if;

return ganador;

end;//

select liga.ganavisitante("25-3")//

--------------------

create procedure palindromo(in palabra varchar(50))

begin

declare palsino varchar(20);

if palabra = reverse(palabra) then set palsino= "si es palindroma";

else set palsino= "no es palindroma";

end if;

select palsino;

end;//

---- hacerlo con frases.

---------------------------

Page 15: 1. Funciones SGBD Consulta y actualización de datos · 3. Permisos MYSQL ... todos los campos relacionados con una tabla, ... La arquitectura de tres capas El objetivo de la arquitectura

1. Sobre la base de pruebas test crea un procedimiento para mostrar el año

actual.

-------------------------------------

CREATE PROCEDURE test.fecha()

select YEAR(now());

call fecha();

-----------------

Crea y muestra una variable de usuario con SET. ¿Debe ser de sesión o puede

ser global?

delimiter //

-------------

set @variable=1;

select @variable//

-----------

3. Usa un procedimiento que sume uno a la variable anterior cada vez que se

ejecute. En este caso la variable es de entrada salida ya que necesitamos su valor

para Incrementarlo y además necesitamos usarlo después de la función para

comprobarlo.

delimiter //

create procedure test.aumentar(inout a int)

begin

set a=a+1;

end;//

call aumentar(@variable)//

SELECT @a//

-------Crea un procedimiento que muestre las tres primeras letras de una cadena

pasada como parámetro en

mayúsculas

delimiter //

Page 16: 1. Funciones SGBD Consulta y actualización de datos · 3. Permisos MYSQL ... todos los campos relacionados con una tabla, ... La arquitectura de tres capas El objetivo de la arquitectura

create procedure cortando(in cadena char(20) )

begin

set cadena=substr(cadena, 1,3);

set cadena=upper(cadena);

select cadena;

end;//

create procedure test.tres(in a char(20), out b char(20))

begin

set b=CONCAT(UPPER(LEFT(a,3)),SUBSTR(a,4));

end;//

call tres("estruendo",@mayus)//

select @mayus//

-------Crea un procedimiento que muestre dos cadenas pasadas como parámetros

concatenadas y en mayúscula.

delimiter //

create procedure test.concatenar(in a char(20), in b char(20),out c char(20))

begin

set c=CONCAT(UPPER (a), UPPER(b));

end;//

call concatenar("hola"," chato",@frase)//

select @frase//

-------Crea una función que devuelva el valor de la hipotenusa de un triángulo a

partir de los valores de sus lados.

drop function hipo//

delimiter //

Page 17: 1. Funciones SGBD Consulta y actualización de datos · 3. Permisos MYSQL ... todos los campos relacionados con una tabla, ... La arquitectura de tres capas El objetivo de la arquitectura

create function hipo(a int,b int) Returns int

Begin

declare raiz int;

declare potencia int;

set potencia=power(a,2)+power(b,2);

set raiz=sqrt(potencia);

return raiz;

end;//

select hipo(2,2)//

--------------------

DELIMITER //

CREATE FUNCTION totalpuntos (resultado char(7))

RETURNS INT

BEGIN

DECLARE a INT;

DECLARE b INT;

DECLARE total INT;

SET a=SUBSTR(resultado,1,3);

SET b=SUBSTR(resultado,5,7);

SET total=a+b;

RETURN total;

END; //

DELIMITERÂ ;

SELECT totalpuntos('050-025');

SET @p1='050-025';

SELECT totalpuntos(@p1);

CREATE PROCEDURE test.hola_mundo() SELECT ' hola mundo ';

call hola_mundo();

------------------------------

Page 18: 1. Funciones SGBD Consulta y actualización de datos · 3. Permisos MYSQL ... todos los campos relacionados con una tabla, ... La arquitectura de tres capas El objetivo de la arquitectura

delimiter //

CREATE PROCEDURE test.hola_mundo3()

begin

SELECT ' hola mundo ';

SELECT ' adios mundo ';

end//

delimiter ;

call hola_mundo();

DELIMITER SS

DROP PROCEDURE If EXISTS hola mundo$$

CREATE PROCEDURE test . hola_mundo()

BEGIN

SELECT ' hola mundo ';

END$S

Page 19: 1. Funciones SGBD Consulta y actualización de datos · 3. Permisos MYSQL ... todos los campos relacionados con una tabla, ... La arquitectura de tres capas El objetivo de la arquitectura

CREATE PROCEDURE version() SELECT version();

DELIMITER //

CREATE PROCEDURE fecha()

LANGUAGE SQL

NOT DETERMINISTIC

COMMENT 'A Procedure '

SELECT CURRENT_DATE ,

//

-------------------------------

DELIMITER //

CREATE FUNCTION suma(a int, b int) RETURNS int deterministic

BEGIN

Page 20: 1. Funciones SGBD Consulta y actualización de datos · 3. Permisos MYSQL ... todos los campos relacionados con una tabla, ... La arquitectura de tres capas El objetivo de la arquitectura

RETURN(a+b);

END; //

select suma(2,2)//

----

DELIMITER //

CREATE FUNCTION suma2(a int, b int) RETURNS int deterministic

BEGIN

select (a*b) "Producto";

RETURN(a+b);

END; //

No se puede:

ERROR 1415 (0A000): Not allowed to return a result set from a function

---- lo mismo con procedimiento

DELIMITER //

CREATE procedure suma(in a int, in b int, out c int )

BEGIN

set c=(a+b);

END; //

Page 21: 1. Funciones SGBD Consulta y actualización de datos · 3. Permisos MYSQL ... todos los campos relacionados con una tabla, ... La arquitectura de tres capas El objetivo de la arquitectura

DELIMITER ;

call suma(2,2, @a);

select @a;

-----------------

---- lo mismo con procedimiento de otra manera

DELIMITER //

drop procedure suma2//

CREATE procedure suma2(in a int, in b int)

BEGIN

select (a+b) "La suma es";

END; //

call suma2(2,2)//

-------------------------------

DELIMITER //

CREATE FUNCTION resultado(nota int) RETURNS VARCHAR(20) deterministic

Page 22: 1. Funciones SGBD Consulta y actualización de datos · 3. Permisos MYSQL ... todos los campos relacionados con una tabla, ... La arquitectura de tres capas El objetivo de la arquitectura

BEGIN

IF nota>=5 THEN return "aprobado";

END IF;

END; //

select resultado (5)//

ejemplo:

mysql> select resultado (5)//

+---------------+

| resultado (5) |

+---------------+

| aprobado |

+---------------+

1 row in set (0.00 sec)

mysql> select resultado (4)//

ERROR 1321 (2F005): FUNCTION resultado ended without RETURN

----

DROP FUNCTION resultado//

CREATE FUNCTION resultado(nota int) RETURNS VARCHAR(20) deterministic

BEGIN

IF nota>=5 THEN return "aprobado";

ELSE return "SUSPENSO";

END IF;

END; //

progr estructurada solo un return:

ejemplo:

Page 23: 1. Funciones SGBD Consulta y actualización de datos · 3. Permisos MYSQL ... todos los campos relacionados con una tabla, ... La arquitectura de tres capas El objetivo de la arquitectura

mysql> select resultado (5)//

+---------------+

| resultado (5) |

+---------------+

| aprobado |

+---------------+

1 row in set (0.00 sec)

mysql> select resultado (4)//

+---------------+

| resultado (4) |

+---------------+

| SUSPENSO |

+---------------+

1 row in set (0.00 sec)

mysql>

progr estructurada solo un return:

DROP FUNCTION resultado//

CREATE FUNCTION resultado(nota int) RETURNS VARCHAR(20) deterministic

BEGIN

IF nota>=5 THEN return "aprobado";

ELSE return "SUSPENSO";

END IF;

END; //

-----

---------------****************

--------------------------------------------

Page 24: 1. Funciones SGBD Consulta y actualización de datos · 3. Permisos MYSQL ... todos los campos relacionados con una tabla, ... La arquitectura de tres capas El objetivo de la arquitectura

DELIMITER //

CREATE FUNCTION estado(in_estado CHAR(1))

RETURNS VARCHAR(20)

BEGIN

DECLARE estado VARCHAR(20) ;

IF in_estado - ' P' THEN

SE! estado- ' cadu:=ado ' i

ELSEIF in estado - ' O' THEN

SET estado- ' activo ';

ELSEIF in_status - ' N' THEN

SET estado - ' nuev~ ';

END IF;

RETURN(estado) :

END; //

DROP FUNCTION resultado//

CREATE FUNCTION resultado(nota int) RETURNS VARCHAR(20) deterministic

BEGIN

IF nota>=5 THEN return "aprobado";

ELSE return "SUSPENSO";

END IF;

END; //

-----

progr estructurada solo un return:

delimiter //

DROP FUNCTION resultado//

CREATE FUNCTION resultado(nota int) RETURNS VARCHAR(20) deterministic

Page 25: 1. Funciones SGBD Consulta y actualización de datos · 3. Permisos MYSQL ... todos los campos relacionados con una tabla, ... La arquitectura de tres capas El objetivo de la arquitectura

BEGIN

declare estado varchar (20);

IF nota>=5 THEN set estado="aprobado";

ELSE set estado="SUSPENSO";

END IF;

return estado;

END; //

----

delimiter //

DROP FUNCTION resultado//

CREATE FUNCTION resultado(nota int) RETURNS VARCHAR(20) deterministic

BEGIN

declare estado varchar (20);

IF nota>5 THEN set estado="aprobado";

ELSE if nota=5 then set estado="justito";

else set estado="SUSPENSO";

END IF;

END IF;

return estado;

END; //

----

delimiter //

Page 26: 1. Funciones SGBD Consulta y actualización de datos · 3. Permisos MYSQL ... todos los campos relacionados con una tabla, ... La arquitectura de tres capas El objetivo de la arquitectura

DROP FUNCTION resultado//

CREATE FUNCTION resultado(nota int) RETURNS VARCHAR(20) deterministic

BEGIN

declare estado varchar (20);

IF nota>5 THEN set estado="aprobado";

ELSEif nota=5 then set estado="justito";

else set estado="SUSPENSO";

END IF;

return estado;

END; //

----

delimiter //

DROP FUNCTION resultado//

CREATE FUNCTION resultado(nota int) RETURNS VARCHAR(20) deterministic

BEGIN

declare estado varchar (20);

IF nota>5 THEN begin

set estado="aprobado";

if nota=10 then set estado="Jose Cristian";

end if;

end;

ELSEif nota=5 then set estado="justito";

else set estado="SUSPENSO";

END IF;

Page 27: 1. Funciones SGBD Consulta y actualización de datos · 3. Permisos MYSQL ... todos los campos relacionados con una tabla, ... La arquitectura de tres capas El objetivo de la arquitectura

return estado;

END; //

----

delimiter //

DROP FUNCTION resultado//

CREATE FUNCTION resultado(nota int) RETURNS VARCHAR(20) deterministic

BEGIN

declare estado varchar (20);

IF nota>5 THEN begin

set estado="aprobado";

if nota=10 then set estado=concat(estado, ", Jose Cristian");

end if;

end;

ELSEif nota=5 then set estado="justito";

else set estado="SUSPENSO";

END IF;

return estado;

END; //

---------------****************

--------------------------------------------

-----

Page 28: 1. Funciones SGBD Consulta y actualización de datos · 3. Permisos MYSQL ... todos los campos relacionados con una tabla, ... La arquitectura de tres capas El objetivo de la arquitectura

DELIMITER //

DROP function esimpar//

CREATE FUNCTION esimpar(numero int)

RETURNS int deterministic

BEGIN

DECLARE impar INT default 0;

IF MOD(numero,2) THEN SET impar=TRUE;

END IF ;

RETURN (impar);

END ; //

------

DELIMITER //

DROP PROCEDURE IF EXISTS muestra_estado//

CREATE PROCEDURE muestra_estado(in numero int)

BEGIN

IF (esimpar(numero)) THEN

SELECT CONCAT (numero," es impar") ;

ELSE

SELECT CONCAT(numero," es par") ;

END IF;

END; //

DELIMITER //

Page 29: 1. Funciones SGBD Consulta y actualización de datos · 3. Permisos MYSQL ... todos los campos relacionados con una tabla, ... La arquitectura de tres capas El objetivo de la arquitectura

CREATE PROCEDURE proc20 ()

BEGIN

DECLARE i int DEFAULT 0;

REPEAT

SET i = i+1;

IF MOD(i,2)<>0 THEN select concat (i , " es impar " ) ;

END IF ;

UNTIL i >= 20 END REPEAT;

END ; //