Story Transcript
• Procedimientos Almacenados
• CREATE PROC[EDURE] • [ • {@parámetro tipoDatos} [= predeterminado] [OUTPUT] • ] • [,...n] • [WITH • { • RECOMPILE • | ENCRYPTION • } • ] • AS • Sentencias SQL [...n]
• Una vez que se crea un PA, puede ser llamado todas las veces que sea necesario. • Provee modulación y habilita la reutilización del código->mejora el mantenimiento de la BD aislandola de los cambios en las prácticas del negocio. • Si las reglas de negocios cambian en una organización, se puede modificar a los PA para cumplir con las nuevas reglas de negocio. • Los PA pueden aceptar parámetros de ingreso, retornar parámetros de salida, producir información de retroalimentación de la ejecución en la forma de códigos de estatus y texto descriptivo, y llamar a otros procedimientos. • Ante cualquier tarea simple, se debería escribir un procedimiento almacenado. • Mientras más genérico sea el procedimiento más útil será…
• Procedimiento almacenado sencillo con instrucción select…
• Al ejecutarse muestra todos los datos de persona en la BD Universidad:
• create procedure personas • as • select * from persona
• exec personas
• • • •
create procedure personas1 as select * from persona select * from profesor
• Con select mas complejos…
• Procedimiento que al ejecutarse muestra nombre, apellido y telefono de las personas que son profesores (hombres) …
• • • • • •
create procedure personas2 as select nombre, apellido, telefono from persona, profesor where persona.dni=profesor.dni and varon=1
• Con select mas complejos… • Qué hace el siguiente PA?
• create procedure personas3 • as • select asignatura.nombre as 'Nombre Asignatura', persona.nombre+' '+persona.apellido as 'Nombre Profesor' • from asignatura, profesor, persona • where asignatura.idprofesor=profesor.idprofesor • and profesor.dni=persona.dni
• Procedimiento que al ejecutarse muestra los ramos y su profesor, y ademas, aparte, la cantidad de ramos que dicta cada profesor…
• create procedure personas4 • as • select asignatura.nombre as 'Nombre Asignatura', persona.nombre+' '+persona.apellido as 'Nombre Profesor' • from asignatura, profesor, persona • where asignatura.idprofesor=profesor.idprofesor • and profesor.dni=persona.dni • select count(distinct asignatura.nombre)as 'Cantidad de Ramos Dictados por: ', persona.nombre+' '+persona.apellido as 'Nombre Profesor' • from persona, profesor, asignatura • where asignatura.idprofesor=profesor.idprofesor • and profesor.dni=persona.dni • group by persona.nombre+' '+apellido
• Ejercicio. • Genere un AP que al ejecutarse, muestre el nombre y apellido en una columna „Nombre Alumno‟ de todos los alumnos registrados en la BD UNIVERSIDAD.
• create procedure alumnos • as • select nombre+' '+apellido as 'Nombre Alumno' • from alumno, persona • where persona.dni=alumno.dni
• Ejercicio. • Genere un AP que al ejecutarse, muestre el nombre de cada asignatura de la titulación Matemáticas y el cuatrimestre al que corresponden en la BD UNIVERSIDAD.
• create procedure ramos • as • select asignatura.nombre as Ramo, cuatrimestre • from asignatura, titulacion • where asignatura.idtitulacion=titulacion.idtitulacion • and titulacion.nombre='Matemáticas'
• Ejercicio. • Genere un AP que al ejecutarse, muestre el nombre y apellido en una columna de todos los alumnos registrados en la BD UNIVERSIDAD y la cantidad de ramos que cada uno de ellos esta tomando.
• create procedure alumnoscantramos • as • select persona.nombre+' '+apellido as 'Nombre Alumno', count(idasignatura) as 'Cantidad de ramos' • from alumno, persona, alumnoasignatura • where persona.dni=alumno.dni • and alumno.idalumno=alumnoasignatura.idalumno • group by persona.nombre+' '+apellido
• Tarea. • Genere un AP que al ejecutarse, muestre el nombre de todas las titulaciones y su costo basico total.
• AP que al ejecutarse muestra la cantidad de profesores que hacen ramos para la titulacion Matemáticas.
• CREATE procedure cantidadprofes • as • select count(distinct idprofesor) as 'Total Profesores en Matemáticas' • from titulacion, asignatura • where asignatura.idtitulacion=titulacion.idtitulacion • and titulacion.nombre='Matemáticas'
• Ejercicio • Genere un AP que al ejecutarse, muestre el numero total de titulaciones de la BD universidad.
• create procedure cantidadtit • as • select count(idtitulacion) as 'Total Titulaciones„ from titulacion
• AP que al ejecutarse, muestra el numero total de titulaciones de la BD universidad. • Uso de Print y variables.
• PRINT: Imprime en pantalla. • Print „Mensaje‟ • Print @variable • Print „Mensaje‟+cast(@numero as varchar(10))+‟mensaje‟
• VARIABLES: • Se declaran: declare @variable tipo de dato • Set= lo que se debe realizar con la variable…
• • • •
create procedure cantidadtit1 as declare @cantidad int set @cantidad=(select count(idtitulacion) from titulacion) • print „Cantidad calculada‟ • Cantidad calculada
• • • •
create procedure cantidadtit2 as declare @cantidad int set @cantidad=(select count(idtitulacion) from titulacion) • print @cantidad • 3
• • • •
create procedure cantidadtit3 as declare @cantidad int set @cantidad=(select count(distinct idtitulacion) from titulacion) • print 'Se tienen ' +cast(@cantidad as varchar) +' titulaciones.„
• Se tienen 3 titulaciones.
• Ahora con Print, variables, IF ELSE.
• • • • • • • • •
Create procedure cantidadtit33 as declare @cantidad int set @cantidad=(select count(idtitulacion) from titulacion) print 'Se tienen ' +cast(@cantidad as varchar) +' titulaciones.' If @cantidad=1 • begin • select * from persona • where nombre=@nombre and apellido=@apellido • print 'Select realizado' • end • else • print 'No existe persona, por favor ingresar bien nombre y apellido.'