Universidad Veracruzana: Facultad de Estadística e Informática
Universidad Veracruzana: Facultad de Estadística e Informática
Facultad de Estadstica e
Informtica
Bases de Datos con MySQL
Store procedures
Procedimientos almacenados
CREATE
[DEFINER = { user | CURRENT_USER }]
PROCEDURE sp_name ([proc_parameter[,...]])
[characteristic ...] routine_body
CREATE
[DEFINER = { user | CURRENT_USER }]
FUNCTION sp_name ([func_parameter[,...]])
RETURNS type
[characteristic ...] routine_body
proc_parameter:
[ IN | OUT | INOUT ] param_name type
func_parameter:
param_name type
type:
Any valid MySQL data type
characteristic:
COMMENT 'string'
| LANGUAGE SQL
| [NOT] DETERMINISTIC
| { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL
DATA }
| SQL SECURITY { DEFINER | INVOKER }
routine_body:
Valid SQL routine statement
mysql> DELIMITER //
mysql> CREATE PROCEDURE busca_empleado
-> (in idem int)
-> begin
-> select * from empleados where
nopersonal=idem;
-> end
-> //
Query OK, 0 rows affected (0.00 sec)
mysql> DELIMITER ;
mysql>call busca_empleado(2000);
sp_name
table_expr
mysql> DELIMITER //
mysql> create procedure cuenta_servicios (OUT param1 INT)
-> begin
-> select count(*) INTO param1 from servicio;
-> end
-> //
Query OK, 0 rows affected (0.00 sec)
mysql> DELIMITER ;
mysql> delimiter //
mysql> create FUNCTION hola (s char(20)) RETURNS char (50)
-> return concat ('Hello, ',s,'!');
-> //
Query OK, 0 rows affected (0.00 sec)
mysql> delimiter ;
mysql> select hola('mundo cruel');
+---------------------+
| hola('mundo cruel') |
+---------------------+
| Hello, mundo cruel! |
+---------------------+
1 row in set (0.00 sec)
mysql> DELIMITER //
mysql>
mysql> CREATE PROCEDURE numeros_1_hasta_n
(IN n INT)
-> BEGIN
-> DECLARE contador INT DEFAULT 1;
-> WHILE contador<=n DO
-> SELECT contador; //la salida
-> SET contador = contador + 1 ;
call numeros_1_hasta_n(4);
+----------+
| contador |
+----------+
|
1|
+----------+
1 row in set (0.00 sec)
+----------+
| contador |
+----------+
|
2|
+----------+
1 row in set (0.00 sec)
+----------+
| contador |
+----------+
|
3|
+----------+
1 row in set (0.00 sec)
+----------+
| contador |
+----------+
|
4|
+----------+
1 row in set (0.01 sec)
Query OK, 0 rows affected (0.01
sec)
mysql> DELIMITER //
mysql> create procedure insertar_puesto(puesto varchar(20), salario
double)
-> comment 'Procedimiento para insertar un puesto'
-> begin
-> IF NOT EXISTS (select p.idpuesto from puestos p where
p.puesto=puesto) THEN
-> INSERT INTO puestos (puesto, salario) VALUES (puesto, salario);
-> ELSE
-> select 'El puesto ya existe en la base de datos';
-> END IF;
-> END
-> //
Query OK, 0 rows affected (0.04 sec)
mysql> DELIMITER ;