parent nodes: FuncionesProcedimientos | SQLapuntes

FuncionesProcedimientos

Functions and procedures

Ver si existe y en ese caso borrar una función o un procedimiento:

Ejemplos de funciones programadas por mí

CREATE FUNCTION dbo.GetTipoCod( @ANIO INT )
RETURNS INT	
BEGIN
   -- tipo de codificación del índice. Para todos los CCNN es = 3 (índice 2007) pero Madrid tiene = 4 (índice 2008)
	DECLARE @ID_TIPO_COD AS INT 
	SET @ID_TIPO_COD = ( SELECT TOP 1 ID_TIPO_COD FROM CODIFICACION_INDICES WHERE YEAR( FECHA ) <= @ANIO ORDER BY ID_TIPO_COD DESC )
	RETURN @ID_TIPO_COD 
END
GO


CREATE FUNCTION dbo.GetIdEstadisticas( @CODIGO VARCHAR(4), @ANIO INT )
RETURNS INT
BEGIN
	DECLARE @ID_EST AS INT -- ID_ESTADISTICAS_ANUALES
	DECLARE @LIKE   AS VARCHAR(10)

	-- BÚSQUEDA DEL ID DE ESTADÍSTICAS
	SET @ID_EST = 0
	WHILE( @ANIO >= 2007 AND @ID_EST <= 0 )
	BEGIN
		SET @LIKE   = ('(' + CAST(@ANIO AS VARCHAR)+ ') '+ LEFT(@CODIGO,2) + '%')
		IF EXISTS (SELECT * from ESTADISTICAS_ANUALES WHERE DESCRIPCION LIKE @LIKE )
			SET @ID_EST = (SELECT ID_ESTADISTICAS_ANUALES from ESTADISTICAS_ANUALES WHERE DESCRIPCION LIKE @LIKE )
		SET @ANIO = @ANIO - 1
	END
	
	IF( @ID_EST <= 0 )
		SET @ID_EST = 4 -- Por defecto: 4. "Contratos generales"
	
	RETURN @ID_EST
END
GO

Ejemplos de procedimientos creados por mí

CREATE PROCEDURE dbo.NuevoTipoDocumentoPoliza
	  @CODIGO VARCHAR(4)
	, @DESCR  AS VARCHAR(140) -- Descripción
    , @ID_TIPO_COD AS INT   -- tipo de codificación del Índice, en todos los CCNN es 3 menos en Madrid q es 4, usar la función SELECT dbo.GetTipoCod( @ANIO )
	, @ID_EST AS INT -- ID ESTADÍSTICAS
AS
BEGIN
	-- INSERCIÓN DEL ACTO JURÍDICO en tabla TIPOS_DOCUMENTOS pero como una PÓLIZA (parametrización especial),
	-- SE USA DESDE EL PROCEDIMIENTO dbo.NuevoActoJuridico
	INSERT INTO TIPOS_DOCUMENTOS(CODIGO, ID_ESTADISTICAS_ANUALES, ID_CODIGO_NUEVO, DESCRIPCION, REDUCCION, PUNTOS_FIJOS_TURNO, 
		COMPUTA_SI_UNICO, COMPUTA_SI_DOBLE, COTIZA_POR_COEFICIENTES, TURNO_COMPENSATORIO, TIENE_CUANTIA, COD_TIPO_DOCU, 
		TIPO_ARANCELC, TIPO_ARANCELS, LIQUIDAR_AUNQUE_CERO, REDUCCION_SIEMPRE, CLASE_INMUEBLE, FIJO_TASA, ID_TIPO_COD)
	VALUES( @CODIGO, @ID_EST, 0, @DESCR, 0.0, 0.0, 
			0, 0, 0, 0, 1, 0, 
			0, 0, 0, 0, 00, 0, @ID_TIPO_COD) 

	-- INSERCIÓN DE LA PÓLIZA EN TIPOS_POLIZAS
	IF( NOT EXISTS ( SELECT * FROM TIPOS_POLIZAS WHERE CODIGO = @CODIGO AND ID_TIPO_COD = @ID_TIPO_COD ) )
	BEGIN
		INSERT INTO TIPOS_POLIZAS( [CODIGO], [DESCRIPCION], [GRUPO_POLIZAS], [CORRETAJE_MENOS_SEIS], [CORRETAJE_MAS_SEIS], [MODELO_DILIGENCIA], [ID_SERIE], [TEXTO_PARAMETROS], [ID_INSTRU_NOTARIAL], [ID_TIPO_COD]) 
		VALUES ( @CODIGO, @DESCR, 1, 1, 0, null, 0, '01100000000000000000000000000000000000000000000000', 0, @ID_TIPO_COD)
	END
END
GO



CREATE PROCEDURE dbo.NuevoTipoDocumentoNoPoliza
	  @CODIGO VARCHAR(4)
	, @DESCR  AS VARCHAR(140) -- Descripción
    , @ID_TIPO_COD AS INT   -- tipo de codificación del Índice, en todos los CCNN es 3 menos en Madrid q es 4, usar la función SELECT dbo.GetTipoCod( @ANIO )
	, @ID_EST AS INT -- ID ESTADÍSTICAS
AS
BEGIN
	-- INSERCIÓN DEL ACTO JURÍDICO en tabla TIPOS_DOCUMENTOS, SE USA DESDE EL PROCEDIMIENTO dbo.NuevoActoJuridico
	INSERT INTO TIPOS_DOCUMENTOS(CODIGO, ID_ESTADISTICAS_ANUALES, ID_CODIGO_NUEVO, DESCRIPCION, REDUCCION, PUNTOS_FIJOS_TURNO, 
		COMPUTA_SI_UNICO, COMPUTA_SI_DOBLE, COTIZA_POR_COEFICIENTES, TURNO_COMPENSATORIO, TIENE_CUANTIA, COD_TIPO_DOCU, 
		TIPO_ARANCELC, TIPO_ARANCELS, LIQUIDAR_AUNQUE_CERO, REDUCCION_SIEMPRE, CLASE_INMUEBLE, FIJO_TASA, ID_TIPO_COD)
	VALUES( @CODIGO, @ID_EST, 0, @DESCR, 0.0, 0.0, 
			1, 1, 1, 0, 1, 0, 
			0, 0, 1, 1, 00, 60.09, @ID_TIPO_COD) 
END
GO


CREATE PROCEDURE dbo.NuevoActoJuridico
	  @CODIGO VARCHAR(4)
	, @DESCR  AS VARCHAR(140) -- Descripción
	, @ANIO   AS INT
    , @ID_TIPO_COD AS INT   -- tipo de codificación del Índice, en todos los CCNN es 3 menos en Madrid q es 4, usar la función SELECT dbo.GetTipoCod( @ANIO )
AS
BEGIN
    IF NOT EXISTS ( SELECT * FROM TIPOS_DOCUMENTOS WHERE CODIGO = @CODIGO )
	BEGIN
		-- Obtiene el id de estadísticas para ese código y año
		DECLARE @ID_EST AS INT -- ID ESTADÍSTICAS
		SET @ID_EST = ( SELECT ( dbo.GetIdEstadisticas( @CODIGO, @ANIO ) ) )

		
		IF( (SELECT LEFT(@CODIGO,2)) <> '17' )  -- mira el código para ver si es o no una póliza
		BEGIN
			-- Si no es una póliza hace una inserción en TIPOS_DOCUMENTOS
			EXECUTE  NuevoTipoDocumentoNoPoliza @CODIGO, @DESCR, @ID_TIPO_COD, @ID_EST 
		END			
		ELSE  -- es una póliza
		BEGIN
			EXECUTE  NuevoTipoDocumentoPoliza @CODIGO, @DESCR, @ID_TIPO_COD, @ID_EST 
		END
	END
END
go

Ejemplos de llamadas a funciones:

    DECLARE @ANIO   AS INT
    ...
	-- tipo de codificación del índice. Para todos los CCNN es = 3 (índice 2007) pero Madrid tiene = 4 (índice 2008)
	SET @ANIO   = 2011
	DECLARE @ID_TIPO_COD AS INT 
	SET @ID_TIPO_COD = ( SELECT dbo.GetTipoCod( @ANIO ) )

Ejemplos de llamadas a procedimientos

    DECLARE @CODIGO AS VARCHAR(4)
	DECLARE @DESCR  AS VARCHAR(140) -- DESCRIPCION
    ...
	SET @CODIGO = '1025'
	SET @DESCR  = 'DESAFECTACIÓN DE COMUNIDAD DE BIENES, CONSORCIO FORAL ARAGONÉS U OTRAS COMUNIDADES FISCALES.'
	EXECUTE dbo.NuevoActoJuridico  @CODIGO, @DESCR, @ANIO, @ID_TIPO_COD