Insercion de datos.. Tabla persona. create procedure insertarpersona (@DNI varchar(9), @nombre...

48
•Insercion de datos.

Transcript of Insercion de datos.. Tabla persona. create procedure insertarpersona (@DNI varchar(9), @nombre...

Page 1: Insercion de datos.. Tabla persona. create procedure insertarpersona (@DNI varchar(9), @nombre varchar(25), @apellido varchar(50), @ciudad varchar(25),

• Insercion de datos.

Page 2: Insercion de datos.. Tabla persona. create procedure insertarpersona (@DNI varchar(9), @nombre varchar(25), @apellido varchar(50), @ciudad varchar(25),

• Tabla persona.

Page 3: Insercion de datos.. Tabla persona. create procedure insertarpersona (@DNI varchar(9), @nombre varchar(25), @apellido varchar(50), @ciudad varchar(25),

• create procedure insertarpersona (@DNI varchar(9), @nombre varchar(25), @apellido varchar(50), @ciudad varchar(25), @direccioncalle varchar(50), @direccionnum varchar(3), @telefono varchar(9), @fechanacimiento datetime, @varon char(1))

• as• insert into persona (DNI, Nombre, Apellido,

Ciudad, DireccionCalle, DireccionNum, Telefono, FechaNacimiento, Varon)

• values (@DNI, @Nombre, @APellido, @Ciudad, @DireccionCalle, @DireccionNum, @Telefono, @FechaNacimiento, @Varon)

Page 4: Insercion de datos.. Tabla persona. create procedure insertarpersona (@DNI varchar(9), @nombre varchar(25), @apellido varchar(50), @ciudad varchar(25),

• exec insertarpersona '34535435', 'juan', 'perez', 'concepcion', 'ongolmo', '34','3434343', '12-2-1978', '1'

Page 5: Insercion de datos.. Tabla persona. create procedure insertarpersona (@DNI varchar(9), @nombre varchar(25), @apellido varchar(50), @ciudad varchar(25),

• Qué problema podría surgir al insertar una nueva persona?

• Que condicion se podría aplicar aquí?

Page 6: Insercion de datos.. Tabla persona. create procedure insertarpersona (@DNI varchar(9), @nombre varchar(25), @apellido varchar(50), @ciudad varchar(25),

• Persona con ese ID ya existe…

Page 7: Insercion de datos.. Tabla persona. create procedure insertarpersona (@DNI varchar(9), @nombre varchar(25), @apellido varchar(50), @ciudad varchar(25),

• create procedure insertarpersona1 (@DNI varchar(9), @nombre varchar(25), @apellido varchar(50), @ciudad varchar(25), @direccioncalle varchar(50), @direccionnum varchar(3), @telefono varchar(9), @fechanacimiento datetime, @varon char(1))

• as• if not exists(select * from persona where dni=@dni)• begin• insert into persona (DNI, Nombre, Apellido, Ciudad,

DireccionCalle, DireccionNum, Telefono, FechaNacimiento, Varon)• values (@DNI, @Nombre, @APellido, @Ciudad, @DireccionCalle,

@DireccionNum, @Telefono, @FechaNacimiento, @Varon)• print ‘Persona insertada.'• end• else• print 'Ya existe una persona con ese DNI.'

Page 8: Insercion de datos.. Tabla persona. create procedure insertarpersona (@DNI varchar(9), @nombre varchar(25), @apellido varchar(50), @ciudad varchar(25),

• Que pasa si se ingresa en el atributo varon un valor distinto a 0 o 1?

Page 9: Insercion de datos.. Tabla persona. create procedure insertarpersona (@DNI varchar(9), @nombre varchar(25), @apellido varchar(50), @ciudad varchar(25),

• create procedure insertarpersona2 (@DNI varchar(9), @nombre varchar(25), @apellido varchar(50), @ciudad varchar(25), @direccioncalle varchar(50), @direccionnum varchar(3), @telefono varchar(9), @fechanacimiento datetime, @varon char(1))

• as• if not exists(select * from persona where dni=@dni)• begin• if @varon in ('0', '1')• begin• insert into persona (DNI, Nombre, Apellido, Ciudad, DireccionCalle, DireccionNum,

Telefono, FechaNacimiento, Varon)• values (@DNI, @Nombre, @APellido, @Ciudad, @DireccionCalle, @DireccionNum,

@Telefono, @FechaNacimiento, @Varon)• print 'Persona insertada.'• end• else• print 'Persona debe ser 1 o 0'• end• else• print 'Ya existe una persona con ese DNI.'

Page 10: Insercion de datos.. Tabla persona. create procedure insertarpersona (@DNI varchar(9), @nombre varchar(25), @apellido varchar(50), @ciudad varchar(25),

• RETURN. Salida incondicional del procedimiento. Las instrucciones que siguen a RETURN no se ejecutan.

• Sintaxis• RETURN [ integer_expression ]

• Argumentos. • integer_expression: Es el valor entero que se devuelve.

Los procedimientos almacenados pueden devolver un valor entero al procedimiento que realiza la llamada o a una aplicación.

• Tipos devueltos• Opcionalmente devuelve int.

Page 11: Insercion de datos.. Tabla persona. create procedure insertarpersona (@DNI varchar(9), @nombre varchar(25), @apellido varchar(50), @ciudad varchar(25),

• Veamos el ejemplo anterior usando RETURN

Page 12: Insercion de datos.. Tabla persona. create procedure insertarpersona (@DNI varchar(9), @nombre varchar(25), @apellido varchar(50), @ciudad varchar(25),

• CREATE procedure insertarpersona3 (@DNI varchar(9), @nombre varchar(25), @apellido varchar(50), @ciudad varchar(25), @direccioncalle varchar(50), @direccionnum varchar(3), @telefono varchar(9), @fechanacimiento datetime, @varon char(1))

• as • if not exists(select * from persona where dni=@dni) • begin • if @varon in ('0', '1') • begin • insert into persona (DNI, Nombre, Apellido, Ciudad, DireccionCalle, DireccionNum, Telefono,

FechaNacimiento, Varon) • values (@DNI, @Nombre, @APellido, @Ciudad, @DireccionCalle, @DireccionNum, @Telefono,

@FechaNacimiento, @Varon) • return 0 • end • else • return 1 • end • else • return 2

Page 13: Insercion de datos.. Tabla persona. create procedure insertarpersona (@DNI varchar(9), @nombre varchar(25), @apellido varchar(50), @ciudad varchar(25),

• Como se ejecuta esto?

Page 14: Insercion de datos.. Tabla persona. create procedure insertarpersona (@DNI varchar(9), @nombre varchar(25), @apellido varchar(50), @ciudad varchar(25),

• declare @status int• exec @status=insertarpersona3 '264562', 'juan', 'perez',

'concepcion', 'ongolmo', '34','3434343', '12-2-1978', '3'• if @status=0• print 'Datos de persona ingresados correctamente.'• else• if @status=1• print 'Atributo varon de Persona debe ser 0 o 1.'• else • if @status=2• print 'Ya existe persona con ese dni.'

Page 15: Insercion de datos.. Tabla persona. create procedure insertarpersona (@DNI varchar(9), @nombre varchar(25), @apellido varchar(50), @ciudad varchar(25),

• Si solo queremos conocer el valor de la variable status:

Page 16: Insercion de datos.. Tabla persona. create procedure insertarpersona (@DNI varchar(9), @nombre varchar(25), @apellido varchar(50), @ciudad varchar(25),

• declare @status int• exec @status=insertarpersona2 '264562', 'juan', 'perez',

'concepcion', 'ongolmo', '34','3434343', '12-2-1978', '1'• print @status• **********************• declare @status int• exec @status=insertarpersona2 '364562', 'juan', 'perez',

'concepcion', 'ongolmo', '34','3434343', '12-2-1978', '1'• print 'Status es: ' +cast( @status as varchar)• **********************• declare @status int• exec @status=insertarpersona2 '3645623', 'juan', 'perez',

'concepcion', 'ongolmo', '34','3434343', '12-2-1978', '1'• select Status=@status • /* select @status as Status*/

Page 17: Insercion de datos.. Tabla persona. create procedure insertarpersona (@DNI varchar(9), @nombre varchar(25), @apellido varchar(50), @ciudad varchar(25),
Page 18: Insercion de datos.. Tabla persona. create procedure insertarpersona (@DNI varchar(9), @nombre varchar(25), @apellido varchar(50), @ciudad varchar(25),

• Return siempre hara salir de la rutina programada…

• Return no devuelve valor…

Page 19: Insercion de datos.. Tabla persona. create procedure insertarpersona (@DNI varchar(9), @nombre varchar(25), @apellido varchar(50), @ciudad varchar(25),

• create procedure insertarpersona22 (@DNI varchar(9), @nombre varchar(25), @apellido varchar(50), @ciudad varchar(25), @direccioncalle varchar(50), @direccionnum varchar(3), @telefono varchar(9), @fechanacimiento datetime, @varon char(1))

• as • if not exists(select * from persona where dni=@dni) • begin • if @varon in ('0', '1') • begin • insert into persona (DNI, Nombre, Apellido, Ciudad, DireccionCalle, DireccionNum,

Telefono, FechaNacimiento, Varon) • values (@DNI, @Nombre, @APellido, @Ciudad, @DireccionCalle, @DireccionNum,

@Telefono, @FechaNacimiento, @Varon) • print 'Datos de persona ingresados' • select * from persona where dni=@dni • return• end • else • print 'Atributo varon de Persona debe ser 0 o 1.'• end • else • print 'Ya existe persona con ese dni.'

Page 20: Insercion de datos.. Tabla persona. create procedure insertarpersona (@DNI varchar(9), @nombre varchar(25), @apellido varchar(50), @ciudad varchar(25),

• create procedure insertarpersona23 (@DNI varchar(9), @nombre varchar(25), @apellido varchar(50), @ciudad varchar(25), @direccioncalle varchar(50), @direccionnum varchar(3), @telefono varchar(9), @fechanacimiento datetime, @varon char(1))

• as • if not exists(select * from persona where dni=@dni) • begin • if @varon in ('0', '1') • begin • insert into persona (DNI, Nombre, Apellido, Ciudad, DireccionCalle, DireccionNum,

Telefono, FechaNacimiento, Varon) • values (@DNI, @Nombre, @APellido, @Ciudad, @DireccionCalle, @DireccionNum,

@Telefono, @FechaNacimiento, @Varon) • print 'Datos de persona ingresados' • return• select * from persona where dni=@dni • end • else • print 'Atributo varon de Persona debe ser 0 o 1.'• end • else • print 'Ya existe persona con ese dni.'

Page 21: Insercion de datos.. Tabla persona. create procedure insertarpersona (@DNI varchar(9), @nombre varchar(25), @apellido varchar(50), @ciudad varchar(25),

• Uso de parametros de entrada con valores por defecto:

• Create procedure proc (@uno varchar(10)=default, @dos int=default)

• Default puede ser NULL

Page 22: Insercion de datos.. Tabla persona. create procedure insertarpersona (@DNI varchar(9), @nombre varchar(25), @apellido varchar(50), @ciudad varchar(25),

• Ejercicio.

• Insertar nuevo registro en tabla titulacion.

• Usar RETURN

• Tomar en cuenta?

Page 23: Insercion de datos.. Tabla persona. create procedure insertarpersona (@DNI varchar(9), @nombre varchar(25), @apellido varchar(50), @ciudad varchar(25),

– Si hay otra titulacion con ese id– Id titulacion no puede ser null– Nombre titulacion no puede ser null

Page 24: Insercion de datos.. Tabla persona. create procedure insertarpersona (@DNI varchar(9), @nombre varchar(25), @apellido varchar(50), @ciudad varchar(25),

• create PROCEDURE insert_Titulacion (@IdTitulacion numeric(6)=NULL, @Nombre varchar(20)=NULL)

• AS • if @IdTitulacion is NULL• return 1• else • if @Nombre is NULL• return 2• else• if not exists (select * from titulacion where idtitulacion=@idtitulacion) • begin • INSERT INTO Titulacion (IdTitulacion,Nombre) • VALUES (@IdTitulacion, @Nombre)• return 0• end• else• return 3

Page 25: Insercion de datos.. Tabla persona. create procedure insertarpersona (@DNI varchar(9), @nombre varchar(25), @apellido varchar(50), @ciudad varchar(25),

• declare @status int• exec @status=insert_Titulacion 343424, ‘Aleman'• if @status=1• print 'Debe ingresar un ID de titulación'• if @status=2• print 'Debe haber un nombre de titulación relacionada

con el ID'• if @status=0• print 'Se ingreso titulación correctamente'• if @status=3• print 'Ya existe titulacion con ese id'

Page 26: Insercion de datos.. Tabla persona. create procedure insertarpersona (@DNI varchar(9), @nombre varchar(25), @apellido varchar(50), @ciudad varchar(25),

• Insertar datos en tabla Alumno. Recordar:

• Cuál(es) seria(n) la(s) condicion(es) para poder hacer la inserción?

Page 27: Insercion de datos.. Tabla persona. create procedure insertarpersona (@DNI varchar(9), @nombre varchar(25), @apellido varchar(50), @ciudad varchar(25),

• (Asumiendo que valores son <> de NULL)

1. No debe haber otro alumno con el mismo id.

2. Para ser ingresado como alumno, debe estar como persona. (integridad referencial)

3. No puede haber otro alumno con el mismo DNI (duplicacion)

Page 28: Insercion de datos.. Tabla persona. create procedure insertarpersona (@DNI varchar(9), @nombre varchar(25), @apellido varchar(50), @ciudad varchar(25),

• create procedure insertaralumno (@idalumno varchar(7), @DNI varchar(9))• as• if not exists(select * from alumno where idalumno=@idalumno)• begin• if exists (Select * from persona where dni=@dni)• begin • if not exists (select * from alumno where dni=@dni)• begin• insert into alumno (idalumno, DNI)• values (@idalumno, @DNI)• return 0• end• else• return 1• end• else• return 2• end• else• return 3

Page 29: Insercion de datos.. Tabla persona. create procedure insertarpersona (@DNI varchar(9), @nombre varchar(25), @apellido varchar(50), @ciudad varchar(25),

• declare @status int• exec @status=insertaralumno 'A02024', '26262626A'

• if @status=0• print 'Alumno ingresado correctamente.'• else• if @status=1• print 'Ya hay un alumno con ese DNI'• else • if @status=2• print 'No esta ingresado como persona'• else• if @status=3 • print 'Ya existe alumno con ese id.'

Page 30: Insercion de datos.. Tabla persona. create procedure insertarpersona (@DNI varchar(9), @nombre varchar(25), @apellido varchar(50), @ciudad varchar(25),

• Ejercicio.

• Insertar datos en tabla alumnoasignatura. Usar IF ELSE, RETURN, PRINT

• Qué condiciones se deben tomar en cuenta?

• (Realizar)

Page 31: Insercion de datos.. Tabla persona. create procedure insertarpersona (@DNI varchar(9), @nombre varchar(25), @apellido varchar(50), @ciudad varchar(25),

• Otras condiciones…

• Alumnos solo pueden tomar cierta cantidad de ramos…: 3 ramos.

• …

• Alumnos pueden tomar solo hasta 20 creditos…(TAREA)

Page 32: Insercion de datos.. Tabla persona. create procedure insertarpersona (@DNI varchar(9), @nombre varchar(25), @apellido varchar(50), @ciudad varchar(25),

• create procedure insertaralumnoasignatura1 (@idalumno varchar(7), @idasignatura numeric(6)) • as • • if (select count(*) from alumnoasignatura where idalumno=@idalumno and idasignatura=@idasignatura)>=1• return 1 /*registro ya existe*/ • else • begin • if exists (select * from alumno where idalumno=@idalumno)/*si existe el alumno...*/ • begin • if exists (select * from asignatura where idasignatura=@idasignatura)/*si existe el ramo*/ • begin • if (select count(idasignatura) from alumnoasignatura where idalumno=@idalumno)<3• begin• insert into alumnoasignatura (IdAlumno, IdAsignatura) • values (@idalumno, @idasignatura) • return 0 /*se inserto registro*/ • end• else• return 4 /*ya tiene 3 ramos registrados*/• end • else • return 2 /*ramo no existe*/ • end • else • return 3 /*alumno no existe*/ • end

Page 33: Insercion de datos.. Tabla persona. create procedure insertarpersona (@DNI varchar(9), @nombre varchar(25), @apellido varchar(50), @ciudad varchar(25),

• declare @status int• exec @status=insertaralumnoasignatura1 'A010101', 443534• if @status=0• print 'Registro ingresado correctamente.'• else• if @status=1• print 'Registro ya existe'• else • if @status=2• print 'Ramo no registrado'• else• if @status=3 • print 'Alumno no registrado'• else• if @status=4 • print 'Alumno ya tiene 3 ramos registrados'

Page 34: Insercion de datos.. Tabla persona. create procedure insertarpersona (@DNI varchar(9), @nombre varchar(25), @apellido varchar(50), @ciudad varchar(25),

• Otras…

• Ejercicio.

• Por ejemplo, los ramos de la titulación Matemáticas sólo pueden ser tomados por alumnos varones.

• (Realizar)

Page 35: Insercion de datos.. Tabla persona. create procedure insertarpersona (@DNI varchar(9), @nombre varchar(25), @apellido varchar(50), @ciudad varchar(25),

• Modificar/Update datos de una tabla.

• Ejercicio.

• AP que modifique nombre, creditos y costebasico de una asignatura a partir de su id.

• Como seria? Usar IF ELSE y RETURN

Page 36: Insercion de datos.. Tabla persona. create procedure insertarpersona (@DNI varchar(9), @nombre varchar(25), @apellido varchar(50), @ciudad varchar(25),

• Create PROCEDURE updateAsignatura (@IdAsignatura numeric, @Nombre varchar(50), @Creditos float, @CosteBasico numeric)

• AS • if exists (select * from asignatura where

idasignatura=@idasignatura)• begin• UPDATE Asignatura • SET Nombre=@Nombre, Creditos=@Creditos,

CosteBasico=@CosteBasico • WHERE IdAsignatura=@IdAsignatura• return 0• end• else • return 1

Page 37: Insercion de datos.. Tabla persona. create procedure insertarpersona (@DNI varchar(9), @nombre varchar(25), @apellido varchar(50), @ciudad varchar(25),

• declare @status int• exec @status=updateAsignatura 114545,

'Ingles', 4, 20

• if @status=0• print 'Registro actualizado.'• else• if @status=1• print 'No se pudo actualizar, asignatura no

existe.'

Page 38: Insercion de datos.. Tabla persona. create procedure insertarpersona (@DNI varchar(9), @nombre varchar(25), @apellido varchar(50), @ciudad varchar(25),

• Ejercicio.

• Crear un PA que modifique el telefono de una persona a partir de su nombre.

• Que pasa si hay 2 personas con el mismo nombre?

• (Realizar)

Page 39: Insercion de datos.. Tabla persona. create procedure insertarpersona (@DNI varchar(9), @nombre varchar(25), @apellido varchar(50), @ciudad varchar(25),

• Que pasa si quiero actualizar un id de alguna tabla?

• Tomar en cuenta restricciones de integridad: cascade/restrict

• Otras condiciones?

Page 40: Insercion de datos.. Tabla persona. create procedure insertarpersona (@DNI varchar(9), @nombre varchar(25), @apellido varchar(50), @ciudad varchar(25),

• Actualizar id de tabla titulacion: es usada en asignatura.

• Si esta en cascade…que significa?

Page 41: Insercion de datos.. Tabla persona. create procedure insertarpersona (@DNI varchar(9), @nombre varchar(25), @apellido varchar(50), @ciudad varchar(25),
Page 42: Insercion de datos.. Tabla persona. create procedure insertarpersona (@DNI varchar(9), @nombre varchar(25), @apellido varchar(50), @ciudad varchar(25),

• create PROCEDURE updatetitulacion1 (@idtitantiguo numeric(6), @idtitnuevo numeric(6))• AS • if (select count(*) from titulacion where idtitulacion=@idtitantiguo)=1• begin• if (select count(*) from titulacion where idtitulacion=@idtitnuevo)=0• begin• update titulacion• set idtitulacion=@idtitnuevo• where idtitulacion=@idtitantiguo• return 0• end• else• return 2• end• else • return 1

Page 43: Insercion de datos.. Tabla persona. create procedure insertarpersona (@DNI varchar(9), @nombre varchar(25), @apellido varchar(50), @ciudad varchar(25),

• declare @status int• exec @status=updatetitulacion1 130110, 130112

• if @status=0• print 'Se actualizo id titulacion'• else• if @status=1• print 'No existe esa titulacion'• if @status=2• print 'Id nuevo ya esta tomado'

Page 44: Insercion de datos.. Tabla persona. create procedure insertarpersona (@DNI varchar(9), @nombre varchar(25), @apellido varchar(50), @ciudad varchar(25),

• Si esta en restrict, que significa?

Page 45: Insercion de datos.. Tabla persona. create procedure insertarpersona (@DNI varchar(9), @nombre varchar(25), @apellido varchar(50), @ciudad varchar(25),
Page 46: Insercion de datos.. Tabla persona. create procedure insertarpersona (@DNI varchar(9), @nombre varchar(25), @apellido varchar(50), @ciudad varchar(25),

• Create PROCEDURE updatetitulacion (@idtitantiguo numeric(6), @idtitnuevo numeric(6))• AS • if (select count(*) from titulacion where idtitulacion=@idtitantiguo)=1• begin• if exists (select * from asignatura where idtitulacion=@idtitantiguo)• begin• update asignatura• set idtitulacion=NULL• where idtitulacion=@idtitantiguo• update titulacion• set idtitulacion=@idtitnuevo• where idtitulacion=@idtitantiguo• update asignatura• set idtitulacion=@idtitnuevo• where idtitulacion is NULL• return 0• end• else• begin• update titulacion• set idtitulacion=@idtitnuevo• where idtitulacion=@idtitantiguo• return 1• end• end• else • return 2

Page 47: Insercion de datos.. Tabla persona. create procedure insertarpersona (@DNI varchar(9), @nombre varchar(25), @apellido varchar(50), @ciudad varchar(25),

• declare @status int• exec @status=updatetitulacion 130111, 130110

• if @status=0• print 'Se actualizo id en titulacion y tb en asignatura'• else• if @status=1• print 'Se actualizo id en titulacion' • else• if @status=2• print 'No existe esa titulacion'

Page 48: Insercion de datos.. Tabla persona. create procedure insertarpersona (@DNI varchar(9), @nombre varchar(25), @apellido varchar(50), @ciudad varchar(25),

• Tambien podria imprimirse un mensaje diciendo que no se puede actualizar…