Unidad 9. Programación en TRANSACT SQL (IV)


Con parámetros de salida

Un procedimiento almacenado puede también devolver resultados, definiendo el paramétro como OUTPUT o bien utilizando la instrucción RETURN que veremos en el siguiente apartado.
Para poder recoger el valor devuelto por el procedimiento, en la llamada se tiene que indicar una variable donde guardar ese valor.
Ejemplo:
Definimos el procedimiento ultimo_contrato que nos devuelte la fecha en que se firmó el último contrato en una determinada oficina. El procedimiento tendrá pues dos parámetros, uno de entrada para indicar el número de la oficina a considerar y uno de salida que devolverá la fecha del contrato más reciente de entre los empleados de esa oficina.


    USE Gestion

      GO

      CREATE PROC ultimo_contrato @ofi  INT, @fecha DATETIME OUTPUT

      AS 

      SELECT @fecha=(SELECT MAX(contrato)  FROM empleados WHERE oficina=@ofi)

      GO  

Con @fecha DATETIME OUTPUT indicamos que el parámetro @fecha es de salida, el proceso que realice la llamada podrá recoger su valor después de ejecutar el procedimiento.

En la llamada, para los parámetros de salida, en vez de indicar un valor de entrada se indica un nombre de variable, variable que recogerá el valor devuelto por el procedimiento sin olvidar la palabra OUTPUT:


    DECLARE @ultima AS DATETIME;

    EXEC ultimo_contrato 12,@ultima  OUTPUT;

    PRINT @ultima; 

RETURN

RETURN ordena salir incondicionalmente de una consulta o procedimiento, se puede utilizar en cualquier punto para salir del procedimiento y las instrucciones que siguen a RETURN no se ejecutan. Además los procedimientos almacenados pueden devolver un valor entero mediante esta orden.


    RETURN [expresion_entera] 

  

Expresion_entera es el valor entero que se devuelve.
A menos que se especifique lo contrario, todos los procedimientos almacenados del sistema devuelven el valor 0. Esto indica que son correctos y un valor distinto de cero indica que se ha producido un error.
Cuando se utiliza con un procedimiento almacenado, RETURN no puede devolver un valor NULL. Si un procedimiento intenta devolver un valor NULL (por ejemplo, al utilizar RETURN @var si @var es NULL), se genera un mensaje de advertencia y se devuelve el valor 0.
Si queremos recoger el valor de estado devuelto por el procedimiento la llamada debe ser distinta, y seguir el siguiente modelo:


    EXECUTE  @variable_donde_recogemos_estado = nombre_procedimiento @par, ... 

Con el procedimiento del punto anterior no se puede utilizar esta forma de devolver un resultado porque lo que se devuelve es una fecha, no es un valor entero, pero si quisiéramos definir un procedimiento que nos devuelva el número de empleados de una oficina podríamos hacerlo de dos formas:

De la forma normal con un parámetro de salida:


    USE Gestion

    GO

    CREATE PROC trabajadores @ofi INT,  @num INT OUTPUT

    AS 

    SELECT @num=(SELECT COUNT(*) FROM  empleados WHERE oficina=@ofi)

    GO 

Para obtener en la variable @var el resultado devuelto por el procedimiento la llamada sería:


    DECLARE @var INT;

    EXEC trabajadores 12, @var OUTPUT 

Utilizando return en vez de un parámetro de salida:


    CREATE PROC trabajadores2 @ofi INT

    AS 

    RETURN (SELECT COUNT(*) FROM  empleados WHERE oficina=@ofi)

    GO 

Para obtener en la variable @var el resultado devuelto por el procedimiento la llamada sería:


    DECLARE @var INT;

    EXEC @var= trabajadores2 12

    PRINT @var 

Nos visualiza el número de trabajadores de la oficina número 12.

Febrero-2010
Pág. 9.4

Atrás  Inicio  Adelante





Página inicial  Cursos Informática Gratuitos

Síguenos en:   Facebook       Sobre aulaClic            Política de Cookies


© aulaClic S.L. Todos los derechos reservados. Prohibida la reproducción por cualquier medio.