 |
|
 |
Procedimientos almacenados en Transact SQL
Un procedimiento es un programa dentro de la base de datos que ejecuta una acción o conjunto de acciones especificas.
Un procedimiento tiene un nombre, un conjunto de parámetros (opcional) y un bloque de código.
En Transact SQL los procedimientos almacenados pueden devolver valores (numerico entero) o conjuntos de resultados.
Para crear un procedimiento almacenado debemos emplear la sentencia CREATE PROCEDURE.
CREATE PROCEDURE <nombre_procedure> [@param1 <tipo>, ...]AS -- Sentencias del procedure
|
Para modificar un procedimiento almacenado debemos emplear la sentencia ALTER PROCEDURE.
ALTER PROCEDURE <nombre_procedure> [@param1 <tipo>, ...]AS -- Sentencias del procedure
|
El siguiente ejemplo muestra un procedimiento almacenado, denominado spu_addCliente que inserta un registro en la tabla "CLIENTES".
CREATE PROCEDURE spu_addCliente @nombre varchar(100), @apellido1 varchar(100), @apellido2 varchar(100), @nifCif varchar(20), @fxNaciento datetimeAS INSERT INTO CLIENTES( nombre, apellido1, apellido2, nifcif, fxnacimiento) VALUES( @nombre, @apellido1, @apellido2, @nifCif, @fxNaciento)
|
Para la ejecutar un procedimiento almacenado debemos utilizar la sentencia EXEC. Cuando la ejecución del procedimiento almacenado es la primera instrucción del lote, podemos omitir el uso de EXEC.
El siguiente ejemplo muestra la ejecución del procedimiento almacenado anterior.
DECLARE @fecha_nacimiento datetimeset @fecha_nacimiento = convert(datetime, '13/05/1975', 103)EXEC spu_addCliente 'Pedro', 'Herrarte', 'Sanchez', '00000002323', @fecha_nacimiento
|
Siempre es deseable que las instrucciones del procedure esten dentro de un bloque TRY CATCH y controlados por una transacción.
ALTER PROCEDURE spu_addCliente @nombre varchar(100), @apellido1 varchar(100), @apellido2 varchar(100), @nifCif varchar(20), @fxNaciento datetimeAS BEGIN TRY BEGIN TRAN INSERT INTO CLIENTES(nombre, apellido1, apellido2, nifcif, fxnacimiento) VALUES(@nombre, @apellido1, @apellido2, @nifCif, @fxNaciento) COMMIT
END TRY BEGIN CATCH ROLLBACKPRINT ERROR_MESSAGE()END CATCH |
Si queremos que los parámetros de un procedimiento almacenado sean de entrada-salida debemos especificarlo a través de la palabra clave OUTPUT , tanto en la definición del procedure como en la ejecución.
El siguiente ejemplo muestra la definición de un procedure con parámetros de salida.
CREATE PROCEDURE spu_ObtenerSaldoCuenta @numCuenta varchar(20), @saldo decimal(10,2) output AS BEGIN SELECT @saldo = SALDO FROM CUENTASWHERE NUMCUENTA = @numCuenta
END |
Y para ejecutar este procedure:
DECLARE @saldo decimal(10,2)EXEC spu_ObtenerSaldoCuenta '200700000001', @saldo outputPRINT @saldo
|
Un procedimiento almacenado puede devolver valores numericos enteros a través de la instrucción RETURN. Normalmente debemos utilizar los valores de retorno para determinar si la ejecución del procedimiento ha sido correcta o no. Si queremos obtener valores se recomienda utilizar parámetros de salida o funciones escalares (se verán mas adelante en este tutorial).
El siguiente ejemplo muestra un procedimiento almacenado que devuelve valores.
CREATE PROCEDURE spu_EstaEnNumerosRojos @numCuenta varchar(20)AS BEGIN IF (SELECT SALDO FROM CUENTAS WHERE NUMCUENTA = @numCuenta) < 0BEGIN RETURN 1ENDELSE RETURN 0
END |
El siguiente ejemplo muestra como ejecutar el procedure y obtener el valor devuelto.
DECLARE @rv intEXEC @rv = spu_EstaEnNumerosRojos '200700000001'PRINT @rv
|
Otra caracteristica muy interesante de los procedimientos almacenados en Transact SQL es que pueden devolver uno o varios conjuntos de resultados.
El siguiente ejemplo muestra un procedimiento almacenado que devuelve un conjunto de resultados.
CREATE PROCEDURE spu_MovimientosCuenta @numCuenta varchar(20)AS BEGIN SELECT @numCuenta, SALDO_ANTERIOR , SALDO_POSTERIOR , IMPORTE , FXMOVIMIENTO FROM MOVIMIENTOSINNER JOIN CUENTAS ON MOVIMIENTOS.IDCUENTA = CUENTAS.IDCUENTAWHERE NUMCUENTA = @numCuentaORDER BY FXMOVIMIENTO DESC
END |
La ejecución del procedimiento se realiza normalmente.
EXEC spu_MovimientosCuenta '200700000001'
|
El resultado de la ejecucion ...
NUMCUENTA SALDO_ANTERIOR SALDO_POSTERIOR IMPORTE FXMOVIMIENTO ------------ -------------- ---------------- ------- ----------------------- 200700000001 50.99 100.99 50.00 2007-08-25 16:18:36.490 200700000001 0.99 50.99 50.00 2007-08-23 16:20:41.183 200700000001 50.99 0.99 50.00 2007-08-23 16:16:29.840 200700000001 0.99 50.99 50.00 2007-08-23 16:14:05.900
|
| |
 |
Excelente
por
Jhonatan
Respuesta recibida el [16/11/2007 09:28:43]
|
 |
Nuevamente me ha resuelto muchas dudas,
|
| |
 |
No tengo palabras para expl...
por
Anónimo
Respuesta recibida el [21/01/2008 11:59:57]
|
 |
No tengo palabras para explicarle , lo emosionante que es encontrar respuesta cuando estas iniciando con los Store Procedure , ustedes saben aclarar ese punto de inquited .....Creo que encontre esa palabra para expresarme Gracias por estar ahiiiiii,,,,,,Yinet
|
| |
 |
Excelente
por
alvaro
Respuesta recibida el [22/02/2008 09:47:41]
|
 |
muy buen trabajo, felicitaciones
|
| |
 |
validaciones
por
Jonatan
Respuesta recibida el [23/02/2008 08:56:51]
|
 |
hola... excelente el tema .. pero me gustaria saber mas como por ejemplo como hago validaciones.. es decir .. cuando kiero ingresar campos.. k haya lineas de codigo y segun el error.. me mande un mensaje de error
|
| |
 |
Gracias ¡Felicidades muy buen articulo!
por
Gerardo
Respuesta recibida el [03/04/2008 03:56:14]
|
 |
Gracias no tenia ni idea de lo que es un procedimiento almacenado, que interesante seguire buscando en la web mas informacion.
|
| |
 |
me salvaron
por
jose
Respuesta recibida el [07/06/2008 01:25:58]
|
 |
estoy haciendo mi practica profesional y la verdad uno de mis punto flojos son los procedimientos almacenados la verdad no tienen idea de cuanto me han ayudado de verdad muchisimas gracias y sigan adelante
|
| |
 |
Millones de Gracias
por
Carlos Vera
Respuesta recibida el [24/07/2008 07:11:47]
|
 |
Pedro Herrarte, estoy seguro que muchos muchachos aligual que se sienten muy agradecidos c0n esta colaboracion, no sabes el gusto que da ayar gente tan capas, de entregar sus conocimientos acia gente que recien se inicia, gracias por todo, Sera por la amabilidad que imagino que en la vida todo te ba muy bien ojala sigas triunfando Bye
|
| |
 |
gracias
por
Luiapo2009
Respuesta recibida el [26/08/2008 06:54:44]
|
 |
simplemente gracias me han ayudado de mucho...:)
|
| |
 |
GRACIAS TOTAL
por
ELFOREY
Respuesta recibida el [16/09/2008 08:49:14]
|
 |
GRACIAS POR TU AYUDA, OJALA NOS VEAMOS ALGUN DIA
|
| |
 |
Lo veo OK
por
Miguel
Respuesta recibida el [24/09/2008 03:12:16]
|
 |
No si te enteras pero creo que vas muy bien con tus anuncios de SQL
|
| |
 |
interasante
por
had
Respuesta recibida el [24/09/2008 08:41:16]
|
 |
gracia por brinda la información y tu colaboracion; espero que sigas adelante...
|
| |
 |
Felicitacion
por
Rubén Ramos
Respuesta recibida el [03/10/2008 10:54:57]
|
 |
Muy agradecido con las consultas y la demas información, excelente explicación.
Saludos Rubén Ramos
|
| |
 |
10 es poco
por
Fernando
Respuesta recibida el [09/10/2008 05:34:10]
|
 |
muy bueno
|
| |
 |
Felicidades
por
Martinez
Respuesta recibida el [31/10/2008 12:52:27]
|
 |
Excelente explicacion, ya que todo lo haces paso a paso lo cual hace que el tema se muy entendible.
|
| |
 |
bien
por
x
Respuesta recibida el [03/11/2008 04:05:05]
|
 |
Si es muy buen soporte para consultar rapidamene la sintaxis, por otro lado el conocimiento puede adquirirse con una bibliografia y todos lo podemos tener...
|
| |
 |
muy buena la explicación
por
julio rojas
Respuesta recibida el [06/11/2008 03:10:05]
|
 |
gracias por hacer que tenga una nocion de lo que es un procedimiento almacenado cuando tenga dudas sobre esto voy a consultarles
|
| |
 |
Muy buen articulo
por
Fabiola
Respuesta recibida el [08/11/2008 10:21:55]
|
 |
Hola... me resulto interesante que hay buenos articulo en esta pagina, sobre todo porq explica de manera clara.. me aclaro muchas dudas..
|
| |
 |
Oigan como ago para pasarle ma...
por
Nieva
Respuesta recibida el [10/11/2008 02:53:07]
|
 |
Oigan como ago para pasarle mas de un parámetro
|
| |
 |
gracias
por
alex
Respuesta recibida el [05/12/2008 08:38:43]
|
 |
vale compadre muy buen ejemplo
|
| |
 |
Gracias
por
PGA
Respuesta recibida el [11/12/2008 08:05:27]
|
 |
El aporte esta muy bueno
|
| |
 |
para: No tengo palabras para expl... por Anónimo
por
mente genial oculta
Respuesta recibida el [29/12/2008 04:49:11]
|
 |
Mira, lo unico que demuestras al expresar tu inquietud, es tu falta de instruccion individual, dependes de los demas, te unes a ellos... Por otro lado para allar la demostracion de que el autor de esta pagina supuestamente es experto se neceista la experiencia para demostrarlo, Esta pagina solo es su negocio, como todo en la vida es dinero y negocio.
|
| |
 |
Pregunta???
por
Luis
Respuesta recibida el [07/01/2009 07:01:07]
|
 |
Es posible que a un procedimiento almacenado, se le envie un arreglo como paramero
|
| Añadir comentario ... |
Para preguntar utiliza los foros
|
|

|
Procedimientos almacenados en Transact SQL |
|
Autor:
Pedro Herrarte Sánchez
|
|
Visitas:
30394 |
Fecha de publicación:
02/09/2007 |
Pedro Herrarte, es consultor independiente, ofreciendo servicios de consultoría, análisis, desarrollo y formación.
Posee mas de diez años de experiencia trabajando para las principales empresas de España.
Es especialista en tecnologías .NET, entornos Web, bases de datos (SQL Server y ORACLE) e integración de sistemas.
Es experto en desarrollo (C#, ASP.NET, VB.Net, T-SQL, PL/SQL, , ASP, CGI , C, Pro*C, Java, Essbase, Vignette, PowerBuilder y Visual Basic ...) y bases de datos (SQL Server y ORACLE).
Es fundador, diseñador y programador de www.devjoker.com. |
|
|
Visitas:
38
|
Comentarios:
0
|
Archivo:
Articulos
|
|
Visitas:
108
|
Comentarios:
0
|
Archivo:
Articulos
|
Visitas:
155
|
Comentarios:
0
|
Archivo:
Articulos
|
Visitas:
33
|
Comentarios:
0
|
Archivo:
Articulos
|
Visitas:
285
|
Comentarios:
1
|
Archivo:
Articulos
|
Visitas:
839
|
Comentarios:
2
|
Archivo:
Articulos
|
Visitas:
712
|
Comentarios:
1
|
Archivo:
Articulos
|
Visitas:
447
|
Comentarios:
0
|
Archivo:
Articulos
|
Visitas:
1053
|
Comentarios:
1
|
Archivo:
Articulos
|
Visitas:
250
|
Comentarios:
0
|
Archivo:
Articulos
|
|
|
|
 |
| Encuesta |
|
¿A que perfil te adaptas mejor? |
|
|
|
|
|
|
|
|
 |