parent nodes: FuncionesProcedimientos | SQLapuntes
Functions and procedures
Ver si existe y en ese caso borrar una función o un procedimiento:[ExistsFunction]
[ExistsProcedure]
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