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.
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
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:
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
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)

Procedimientos almacenados

  • 1.
    Procedimientos Almacenados PROCEDIMIENTOS ALMACENADOS CREATEPROCEDURE 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 sabersi 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)