1. Procedimientos Almacenados
PROCEDIMIENTOS ALMACENADOS
CREATE PROCEDURE nombreProcedimiento [@parametro1 tipoDato
[=valordefecto]][,....]
AS
SENTENCIAS…..
forma de llamarlo
[exec] nombreprocedimiento [valorParametro1][,valor paremtro2...]
nombreprocedimeinto @nombreParametro2=valor <= para
asignar un valor a un parámetro sin utilizar el orden.
Exec nombre_procedminto WITH RECOMPILE
Sp_helptext [nombre procedimiento] <= ver los procedimientos o contenido que hay.
DROP PROCEDURE nombreProcemiento
Sp_makestartup nombreProcedmiento <=Para que se ejectura cuando se arranque el
sqlServer
Sp_helpstartup <= indica los que hay
Sp_unmakestartup nombreProcedmiento <= no es autoarracable.
2. Procedimientos Almacenados
Para saber si un parametro se ha puesto ...
CREATE PROCEDURE procedmiento @p1 int = NULL
Y después preguntar
If @p1 IS NULL...
Parametros de salida:
Create procedure procemidneot @p1 int OUTPUT
Para recoger el valor >>> exec procemiento @variable OUTPUT
Ejemplo :
CREATE PROCEDURE UNO
AS
DECLARE @A INT
SELECT @A=1
SELECT @A
EXEC DOS @A OUTPUT
SELECT @A
CREATE PROCEDURE DOS @P1 INT OUTPUT
AS
SELECT @P1 = 2
3. Procedimientos Almacenados
--------------------- SENTENCIAS
DECLARE @nombreVarialbe tipoDeDatos
Para asignarle el valor => SELECT @variable = {Valor / sentencia select que de
un valor unico }
Tambien se puede poner SET @VARIABLE = valor
Si se pone select @variable = select campo from … Solo nos coge el primer valor de
la columna
IF expresiónLogica (valen los exists de sql)
1sola sentencia
[else]
[if expresión
1sola sentencia]
1Sola Sentencia se puede utilizar
BEGIN
....
END
WHILE ExpresionLogica
1Sola sentencia
BREAK
CONTINUE
PRINT SOLO TEXTOS char o varchar, SI se puede concadenar textos en el print
PRINT ‘Texto’
PRINT @VARIABLE_LOCAL
PRINT @@VARIABLE GLOBAL (PAGINA 371)
GOTO ETIQUETA
ETIQUETA:
4. Procedimientos Almacenados
RETURN [numero]
Numero=0 => OK
Para recoger este numero
Exec @valorvariable=nombreProcedimiento.
RETURN NumeroEstado
Por defecto 0 = OK
-1 .. –99 = Errores del Sql
Para nosotros utilizaríamos >0 o menores que –99
En la llamada exec @VARIABLE = ProcedimientoLLAMADOqueTIeneReturn
RAISERROR NumeroError “texto error”
RAISERROR ( NumeroError, gravedad,estado)
RAISERROR ( ‘HOLA QUE TAL’,1,127)
127 = Error de parar lote batch
NumeroError pasa a ser el valor de @@ERROR
Numero de error entre 50,000 a 2,147,4783,647
O bien poner
Sp_addmessage NºMensaje, gravedad, “texto” {true/False}
[,REPLACE]
True/False = Si va al registro de sucesos de windows NT.
Gravedad = 1 .. 25 , Usar de 11 a 16, de 18 a 25 no permiten ejectuar mas
instrucciones del procedimiento, solo para el administrador
Y utilizar raiserror (numeroError,Gravedad,Estado)
O bien raiserror(“texto”, gravedad,estado)
Sp_dropmessage numerodeMensaje
Para ver que mensajes definidos
Select * from master.dbo.sysmessages
5. Procedimientos Almacenados
WAITFOR
Waitfor {DELAY ‘hora’ / TIME ‘hora’ / ERROREXIT / PROCESSEXIT /
MIRROREXIT }
SENTENCIA
Delay = tiempo a esperar ’15:10:10’ ‘horas:minutos:segundos’
Time= hasta esa hora
ERROREXIT= Hasta que falle lo que sigue
MIRROREXIT = Hasta que falle un dispositivo de duplicado.
TABLAS TEMPORALES:
CREATE TABLE #PEPE
Se destruye cuando acaba el proceso.
También select …. into #pepe From ….
Nos crea una tabla con los campos del select.
Ejercicios
1.- Alumnos del 811NMA con nota media mayor que la nota media de ese grupo
2.- Alumnos con nota media mayor a la nota media del grupo pasado como parametro
3.- Relacion de alumnos de un grupo dado (por parámetro)
4.- Boletín de notas de un alumno . Se pasa como parámetro el numero de expediente
5.- Boletín de notas de un alumno. Se pasa como parámetro apellidos y nombre del
alumno
6.- Relación de alumnos con nota media entre dos valores dados que se pasan como
parámetros.
7.- Relación de alumnos con mejor y peor nota media del centro..(TABLAS
TEMPORALES)
8.- Relación de alumnos de un grupo que se pasa como parámetro cuya nota media es
mayor que la nota media de ese grupo.
9.- Número de alumnos de un grupo que tienen mas de 3 asignaturas suspendidas. El
grupo se pasa como parámetro.
10.- Lo mismo que el 9 pero el valor debe ser devuelto al programa que llama el
procedimiento.
11.- Procedimiento almacenado al que le pasamos el código de un alumno y nos
devuelve la nota media.
12. Procedimiento almacenado al que pasamos el código de un grupo y nos devuelve la
nota media de ese grupo (media de todas las notas de los alumnos de ese grupo)