Sei sulla pagina 1di 12

DROP DATABASE IF EXISTS videoteca; CREATE DATABASE videoteca;

Tabla de actores:
USE videoteca; DROP TABLE IF EXISTS actor; CREATE TABLE actor ( id INT NOT NULL AUTO_INCREMENT, nombre VARCHAR(64) NOT NULL, apellidos VARCHAR(64) NOT NULL, imdb VARCHAR(32) NOT NULL DEFAULT '', PRIMARY KEY(id) ) ENGINE = InnoDB;

Registro de prueba:
USE videoteca; INSERT INTO actor(nombre, apellidos, imdb) VALUES('Harrison', 'Ford', 'nm0000148'); INSERT INTO actor(nombre, apellidos, imdb) VALUES('Russell', 'Crowe', 'nm0000128');

Lista de actores
En su versin ms simple:
USE videoteca;

Editar seccin

CREATE PROCEDURE pa_actores_lista() SELECT * FROM actor;

Para ejecutar el procedimiento almacenado:


USE videoteca; CALL pa_actores_lista();

Nmero de registros en la tabla de actores seccin


USE videoteca;

Editar

CREATE PROCEDURE pa_actores_cantidad() SELECT COUNT(*) FROM actor;

Delimitadores
USE videoteca; DELIMITER //

Editar seccin

Nmero de actores, usando variables y delimitadores:

CREATE PROCEDURE pa_actores_cantidad2() BEGIN DECLARE actores INT; SELECT COUNT(*) FROM actor INTO actores; SELECT actores; END // DELIMITER ;

Parmetros
USE videoteca;

Editar seccin

Lista de actores cuyo nombre comienza con una determinada letra:

CREATE PROCEDURE pa_actores_buscar(letra CHAR(2)) SELECT * FROM actor WHERE nombre LIKE letra;

Actores cuyo nombre comienza con la letra h:


USE videoteca;

CALL pa_actores_buscar('h%');

Ahora, tambin se necesita el nmero de actores localizados:


USE videoteca; DELIMITER // CREATE PROCEDURE pa_actores_buscar2( IN letra CHAR(2), OUT actores INT ) BEGIN SELECT * FROM actor WHERE nombre LIKE letra; SELECT COUNT(*) INTO actores FROM actor WHERE nombre LIKE letra; END // DELIMITER ;

Llamada a este procedimiento:


USE videoteca; CALL pa_actores_buscar2('h%', @cantidad);

Obtener el nmero de actores:


SELECT @cantidad;

Funciones almacenadas
Nmero de actores:
USE videoteca;

Editar seccin

DELIMITER // CREATE FUNCTION fa_actores_cantidad() RETURNS INT BEGIN DECLARE actores INT; SELECT COUNT(*) INTO actores FROM actor; RETURN actores; END // DELIMITER ;

Llamada a la funcin almacenada:


USE videoteca; SELECT fa_actores_cantidad();

Eliminacin
USE videoteca;

Editar seccin

Eliminar un procedimiento almacenado y crearlo de nuevo:

DROP PROCEDURE IF EXISTS pa_actores_lista; CREATE PROCEDURE pa_actores_lista() SELECT * FROM actor ORDER BY apellidos, nombre;

Detalles
USE videoteca;

Editar seccin

Obtencin del cdigo de un procedimiento almacenado existente:

SHOW CREATE PROCEDURE pa_actores_lista;

Respuesta ms ordenada:
USE videoteca; SHOW CREATE PROCEDURE pa_actores_lista\G

Detalles de un procedimiento almacenado:


USE videoteca; SHOW PROCEDURE STATUS LIKE 'pa_actores_lista'\G

Detalles de todos los procedimientos almacenados:


USE videoteca; SHOW PROCEDURE STATUS\G

Procedimientos almacenados activos


Insercin de un nuevo actor:
USE videoteca; CREATE PROCEDURE pa_actor_insertar( nuevo_nombre VARCHAR(64), nuevo_apellidos VARCHAR(64), nuevo_imdb VARCHAR(32) ) INSERT INTO actor( nombre, apellidos, imdb ) VALUES( nuevo_nombre, nuevo_apellidos, nuevo_imdb );

Editar seccin

Una insercin:
USE videoteca; CALL pa_actor_insertar( 'Tim','Robbins','nm0000209');

Lista de actores:

USE videoteca; CALL pa_actores_lista();

Creacion:
DROP DATABASE IF EXISTS videoteca; CREATE DATABASE videoteca;

Tablas:
USE videoteca; CREATE TABLE actor ( id INT NOT NULL AUTO_INCREMENT, nombre VARCHAR(64) NOT NULL, apellidos VARCHAR(64) NOT NULL, PRIMARY KEY(id) ) ENGINE = InnoDB; CREATE TABLE actor_ext ( idactor INT NOT NULL, imdb VARCHAR(32) NOT NULL, carpeta VARCHAR(255) NOT NULL, PRIMARY KEY(idactor), INDEX ae_FK(idactor), FOREIGN KEY(idactor) REFERENCES actor(id) ) ENGINE = InnoDB;

Inserciones:
USE videoteca; INSERT INTO actor(nombre, apellidos) VALUES('Harrison', 'Ford'); INSERT INTO actor(nombre, apellidos) VALUES('Russell', 'Crowe'); INSERT INTO actor_ext(idactor, imdb, carpeta) VALUES(1, 'nm0000148', 'harrison_ford'); INSERT INTO actor_ext(idactor, imdb, carpeta) VALUES(2, 'nm0000128', 'russell_crowe');

Desencadenador de insercin
USE videoteca;

Editar seccin

DELIMITER // CREATE TRIGGER dc_actor_insertar AFTER INSERT ON actor FOR EACH ROW BEGIN DECLARE nuevo_carpeta VARCHAR(255); SET nuevo_carpeta = CONCAT( LOWER(NEW.nombre), '_', LOWER(NEW.apellidos) ); INSERT INTO actor_ext(idactor, imdb, carpeta) VALUES(NEW.id, '', nuevo_carpeta); END // DELIMITER ;

Insercin de un nuevo actor:


USE videoteca; INSERT INTO actor(nombre, apellidos) VALUES('Tim','Robins');

Desencadenador de actualizacin
USE videoteca; DELIMITER // CREATE TRIGGER dc_actor_actualizar AFTER UPDATE ON actor FOR EACH ROW BEGIN DECLARE nuevo_carpeta VARCHAR(255); SET nuevo_carpeta = CONCAT( LOWER(NEW.nombre), '_', LOWER(NEW.apellidos) ); UPDATE actor_ext SET carpeta = nuevo_carpeta WHERE idactor = NEW.id;

Editar seccin

END // DELIMITER ;

Cambiar el nombre del actor:


USE videoteca; UPDATE actor SET apellidos = 'Robbins' WHERE id = 3;

Borrado
USE videoteca; DELIMITER //

Editar seccin

CREATE TRIGGER dc_actor_eliminar BEFORE DELETE ON actor FOR EACH ROW BEGIN DELETE FROM actor_ext WHERE idactor = OLD.id; END // DELIMITER ;

Borrar un actor:
USE videoteca; DELETE FROM actor WHERE id = 3;

Mantenimiento de soportes
void btnGuardarClick( object sender, System.EventArgs e ) {

Editar seccin

string sNombre = txtNombre.Text; string sDescripcion = txtDescripcion.Text;

if(sNombre == ""){ MessageBox.Show("Indique un nombre."); return; } if(sDescripcin == ""){ MessageBox.Show("Indique una descripcin."); return; } string sConsulta = "INSERT INTO " + "soporte(nombre, descripcion) "+ "VALUES(" + "'" + sNombre + "'," + "'" + sDescripcion + "'" + ");"; string sCon = "DSN=videoteca"; OdbcConnection oCon = new OdbcConnection(); oCon.ConnectionString = sCon; oCon.Open(); OdbcCommand oCmd = new OdbcCommand(); oCmd.Connection = oCon; oCmd.CommandText = sConsulta; oCmd.ExecuteNonQuery(); oCmd.Close(); }

Mantenimiento de pelculas
Cargar la lista de gneros:
void CargarGeneros(){ string sCmd; sCmd = "SELECT id, nombre " + "FROM genero;"; string sCon = "DSN=videoteca"; OdbcConnection oCon = new OdbcConnection(); oCon.ConnectionString = sCon; oCon.Open(); OdbcCommand oCmd = new OdbcCommand(); oCmd.Connection = oCon; oCmd.CommandText = sCmd;

Editar seccin

OdbcDataReader oReader; oReader = oCmd.ExecuteReader(); long iId = 0; string sNombre = ""; while(oReader.Read()){ iId = (long)oReader.GetValue(0); sNombre = (string)oReader.GetValue(1); lstGeneros.Items.Add( sNombre + " (" + iId + ")"); } oCon.Close(); lstGeneros.SelectedIndex = 0; }

Cargar la lista de soportes:


void CargarSoportes(){ string sCmd; sCmd = "SELECT id, nombre " + "FROM soporte;"; string sCon = "DSN=videoteca"; OdbcConnection oCon = new OdbcConnection(); oCon.ConnectionString = sCon; oCon.Open(); OdbcCommand oCmd = new OdbcCommand(); oCmd.Connection = oCon; oCmd.CommandText = sCmd; OdbcDataReader oReader; oReader = oCmd.ExecuteReader(); long iId = 0; string sNombre = ""; while(oReader.Read()){ iId = (long)oReader.GetValue(0); sNombre = (string)oReader.GetValue(1); lstSoportes.Items.Add( sNombre + " (" + iId + ")"); } oCon.Close(); lstSoportes.SelectedIndex = 0;

Evento de carga del formulario:


void MainFormLoad( object sender, System.EventArgs e) { CargarGeneros(); CargarSoportes(); }

Guardar una pelcula:


void BtnGuardarClick( object sender, System.EventArgs e) { string sTitulo = txtTitulo.Text; if(sTitulo == ""){ MessageBox.Show( "Indique un ttulo."); return; } int iParentesis = 0; int sLongitud = 0; int sCaracteres = 0; string sGenero = lstGeneros.SelectedItem.ToString(); iParentesis = sGenero.LastIndexOf("(")+1; sLongitud = sGenero.Length; sCaracteres = sLongitud-iParentesis-1; int iIdGenero = 0; iIdGenero = Convert.ToInt16( sGenero.Substring(iParentesis, sCaracteres) ); string sSoporte = lstSoportes.SelectedItem.ToString(); iParentesis = sSoporte.LastIndexOf("(") + 1; sLongitud = sSoporte.Length; sCaracteres = sLongitud - iParentesis - 1; int iIdSoporte = 0; iIdSoporte = Convert.ToInt16( sSoporte.Substring(iParentesis, sCaracteres)); string sConsulta= "INSERT INTO " + "pelicula(titulo, idgenero, idsoporte) " + "VALUES(" + "'" + sTitulo + "', " + iIdGenero + ", " +

iIdSoporte + ");"; string sCon = "DSN=videoteca"; OdbcConnection oCon = new OdbcConnection(); oCon.ConnectionString = sCon; oCon.Open(); OdbcCommand oCmd = new OdbcCommand(); oCmd.Connection = oCon; oCmd.CommandText = sConsulta; oCmd.ExecuteNonQuery(); oCon.Close(); }

Potrebbero piacerti anche