Funciones escalares

Embed Size (px)

DESCRIPTION

funciones escalares

Citation preview

Disparadores (triggers)Un "trigger" (disparador o desencadenador) es un tipo de procedimiento almacenado que se ejecuta cuando se intenta modificar los datos de una tabla (o vista).Se definen para una tabla (o vista) especfica. Se crean para conservar la integridad referencial y la coherencia entre los datos entre distintas tablas. Si se intenta modificar (agregar, actualizar o eliminar) datos de una tabla en la que se defini un disparador para alguna de estas acciones (insercin, actualizacin y eliminacin), el disparador se ejecuta (se dispara) en forma automtica.Un trigger se asocia a un evento (insercin, actualizacin o borrado) sobre una tabla.Ejemplo:CREATE OR REPLACE TRIGGER "ALONSO"."INSERCIONNUMEROMAYOR1000" (El create tigger se crea junto al nombre del disparador).AFTER INSERT ON "ALONSO"."PRUEBA" (Se inserta en despus del on el nombre de la tabla o vista para la cual se esta estableciendo el trigger.)FOR EACH ROW WHEN (new.CAMPO2 > 1000) BEGIN insert into resultadodisparador (fecha, aviso, tabla) (Se indica la accin que es el evento deseado o tipo de modificacin que haremos ser sobre la tabla o vista que va a activar el trigger ya sea un ser "insert", "update" o "delete" cualquiera de ellos pero siempre se tiene que colocar una accin y si es mas de una, se separa por comas.values (Sysdate, 'Registro con CAMPO2 superior a 1000', 'PRUEBA');END;(Para entonces aqu ya se especificaron las condiciones y acciones del disparador, las condiciones que determinan cuando un intento de insercin, actualizacin o borrado provoca las acciones que el trigger realizar.On este es el disparador, cuando un usuario inserte un registro en la tabla PRUEBA con su CAMPO2 tenga un valor superior a 1000 se agregara automticamente otro registro en la tabla "resultadodisparador" con la fecha de la insercin sysdate, el aviso "Registro con CAMPO2 superior a 1000" y el nombre de la tabla origen del disparador "PRUEBA".Funciones escalaresLas funciones escalares definidas por el usuario devuelven un nico valor de datos del tipo definido en la clusula RETURNS. En una funcin escalar insertada no hay cuerpo de la funcin; el valor escalar es el resultado de una sola instruccin. Para una funcin escalar de varias instrucciones, el cuerpo de la funcin, definido en un bloque BEGIN...END, contiene una serie de instrucciones de Transact-SQL que devuelven el nico valor. El tipo devuelto puede ser de cualquier tipo de datos excepto text, ntext, image, cursor y timestamp.Calculo del IVA:-Creamos la funcion conel nombre IVA-Indicamos el parmetro de entrada y tipo: @cantidad moneyCreate function IVA (@cantidad money) Returns money -- Indicamos el tipo de parmetros que retornar la funcin.as -Encapsulamos el conjunto de funciones dentro de un Begin y un end.Begin -Dentro de la sentencia o funcion podemos manejar variables -aunque puede no ser necesario para ser ms eficiente la funcin. -por cuestiones de ejemplo usamos la variable @resultado Declare @resultado money set @resultado = @cantidad * 0.16-Cuando terminamos la funcin ponemos el Return Return (@resultado) -- Y la variable que devolver la funcin @resultado.End

Para llamar a la funcin la llamamos con un nombre de dos partes, con el esquema.funcion mas el parametro que requiere la funcion:Select campo_producto, campo_unidadprecio, dbo.iva(campo_unidadprecio) as iva from tablaFunciones con valores de tablaLas funciones con valores de tabla definidas por el usuario devuelven un tipo de datos table. Las funciones con valores de tabla insertados no tienen cuerpo; la tabla es el conjunto de resultados de una sola instruccin SELECT.--Creamos una funcin que se le ingrese por parmetro el pas y devuelva los clientes de ese pas:Create function ListadoPais (@pais varchar(100))returns @clientes table -- Decimos que retornamos como resultado una variable de tipo tabla y la declaramos (customerid varchar(5), companyname varchar(50), -- Se definen las columnas que se necesiten contactname varchar(100), country varhcar(100) ) as -- Iniciamos la funcin. La variable tipo tabla @clientes es la que vamos a devolver como resultado de la funcin begin Insertamos a la variabla tipo tabla @clientes: Insert @clientes select customerid, companyname, contactname, country from customers where country = @pais -- variable @pais de entrada en la funcin Return end

Para ver la funcin funcionando: Select * from dbo.ListadoPais('Argentina')Funciones integradasSQL Server proporciona funciones integradas para ayudarle a realizar diversas operaciones. No se pueden modificar. Puede utilizar funciones integradas en instrucciones Transact-SQL para:Tener acceso a informacin de las tablas del sistema de SQL Server sin tener acceso a las tablas del sistema directamente. Para obtener ms informacin, vea Usar las funciones del sistema.Realizar tareas habituales como SUM, GETDATE o IDENTITY. Para obtener ms informacin, vea Funciones integradas (Transact-SQL).Las funciones integradas devuelven tipos de datos escalares o table. Por ejemplo, @@ERROR devuelve 0 si la ltima instruccin Transact-SQL se ejecut correctamente. Si la instruccin gener un error, @@ERROR devuelve el nmero de error. Y la funcin SUM(parameter) devuelve la suma de todos los valores del parmetro.