Páginas

miércoles, 15 de febrero de 2012

Procedimientos almacenados MySQL


Siguiendo los videotutoriales de Cesar Cancino PHP MySQL orientado a objetos, concretamente el número 16, me encontré con algunos errores al intentar crear procedimientos desde la consola. Todo debido a que simplemente es necesario cambiar el delimitador y así evitar confundir a mysql con el punto y coma (;). Como siempre desde nuestro querido Gentoo con toda la potencia de la consola Linux.

A proposito he adquirido una placa base gigabyte 970-ud3, un procesador bulldozer FX-1400 (4 nucleos),  8 gb de memoria ram a 1600, ventilador cpu katana III y he comprobado que puedo arrancar mi gentoo, debian y ubuntu (he sacado el disco duro del portatil (dell inspiron 1525 procesador dual core T5750 2.0Gb) lo he conectado al pc de sobremesa nuevo y arrancan sin ningun problema, solo he tenido que instalar los drivers de la tarjeta ethernet en gentoo. De todas maneras las CFLAGS AMD Bulldozer FX-8xxx/6xxx/4xxx (4, 6 y 8 procesadores) son:

CFLAGS="-O2 -pipe -fomit-frame-pointer -march=bdver1 -mtune=bdver1 -mcx16 -msahf -maes \
-mpclmul -mpopcnt -mabm -mlwp -mavx"
CXXFLAGS="${CFLAGS}"
CHOST="x86_64-pc-linux-gnu"
Pero,  las march=bdver1 o mtune=bdver1 solo es soportada por la versión del compilador GCC v.4.6.2 y superior

Imagínese su instalación linux de hace 3 o 4 años configurada de acuerdo a sus necesidades y  poder utilizarla en otro ordenador más reciente sin tener que reinstalarlo todo?. Desde luego, quién da más!. Evidentemente, tendría que hacer algunos cambios, como el tipo de procesador, la plataforma (AMD), las Cflags de compilación, los drivers de la tarjeta gráfica, etc, pero no hace falta porque no es definitivo. El kernel de ubuntu es un 3.0 y el de Gentoo es el 2.6.39-gentoo-r3. Debido a la sensible disminución del tiempo compilación (debido a la potencia de la nueva máquina), en los proximos dias realizaré la instalación desde cero. Lo que no se es si utilizaré la versión 4.6.2 del compilador GCC.

carlos@hypatia ~ $ mysql -u root -p

mysql> create database trabajo_sp;

mysql> use trabajo_sp;

mysql> create table ninos (id_nino int not null auto_increment primary key,
nombre varchar(100), edad varchar(10)
);

mysql> create table adultos (id_adulto int not null auto_increment primary key,
nombre varchar (100),
edad varchar (100)
);

mysql> show tables;
+----------------------+
| Tables_in_trabajo_sp |
+----------------------+
| adultos              |
| ninos                |
+----------------------+
2 rows in set (0.00 sec)

Introducimos algunos valores a la tabla ninos:
mysql> insert into ninos values(null,'Rosa Salazar','29');
mysql> insert into ninos values(null,'Carlos Camilo','44');
mysql> call listar_ninos();
+---------+---------------+------+
| id_nino | nombre        | edad |
+---------+---------------+------+
|       1 | Rosa Salazar  | 29   |
|       2 | Carlos Camilo | 44   |
+---------+---------------+------+
3 rows in set (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

El delimitador lo cambiamos para no confundir con el ;
mysql> delimiter //
mysql> create procedure introducir_persona
(in nombre varchar(100), in edad varchar(10))
begin
if edad < 18 then
insert into ninos values(null,nombre,edad);
else
insert into adultos values(null,nombre,edad);
end //

mysql> create procedure listar_adultos()
begin
select * from adultos;
end //

mysql> create procedure listar_ninos()
begin
select * from ninos;
end //

Despues de crear los procedimientos cambio el delimitador:
mysql> delimiter ;

Utilizando la palabra reservada call llamo el procedimiento:
mysql> call introducir_persona('Jesus Conde','45');

Como es mayor de 18 años ha sido insertado en la tabla adultos:
mysql> call listar_adultos();
+-----------+-------------+------+
| id_adulto | nombre      | edad |
+-----------+-------------+------+
|         1 | Jesus Conde | 45   |
+-----------+-------------+------+
1 row in set (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

mysql> call listar_ninos();
+---------+---------------+------+
| id_nino | nombre        | edad |
+---------+---------------+------+
|       1 | Sonia Salazar  | 29   |
|       2 | Carlos Camilo | 44   |
+---------+---------------+------+
2 rows in set (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

mysql> call introducir_persona('Cesar Cancino', '32');
Query OK, 1 row affected (0.00 sec)

mysql> call listar_adultos();
+-----------+---------------+------+
| id_adulto | nombre        | edad |
+-----------+---------------+------+
|         1 | Jesus Conde   | 45   |
|         2 | Cesar Cancino | 32   |
+-----------+---------------+------+
2 rows in set (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

mysql> call introducir_persona('Julia Garcia', '88');
Query OK, 1 row affected (0.00 sec)

mysql> call listar_adultos();
+-----------+---------------+------+
| id_adulto | nombre        | edad |
+-----------+---------------+------+
|         1 | Jesus Conde   | 45   |
|         2 | Cesar Cancino | 32   |
|         3 | Julia Garcia  | 88   |
+-----------+---------------+------+
3 rows in set (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

mysql> call introducir_persona('Susi Alie', '17');
mysql> call introducir_persona('Eduardo Garzon', '10');
Query OK, 1 row affected (0.00 sec)

mysql> call listar_ninos();
+---------+----------------+------+
| id_nino | nombre         | edad |
+---------+----------------+------+
|       1 | Rosa Salazar   | 29   |
|       2 | Carlos Camilo  | 44   |
|       3 | Susi Alie      | 17   |
|       4 | Eduardo Garzon | 10   |
+---------+----------------+------+
4 rows in set (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

Linux es genial!.


No hay comentarios:

Publicar un comentario