Consulta Sybase 12.5
Publicado por Alejandra Garavito (1 intervención) el 06/05/2018 19:47:14
Cordial saludo;
Megustaria por favor y si me podrian colaborar con la siguiente consulta que estoy tratando de realizar en Sybase 12.5.
1)Tengo una Base de datos denominada desarrollo (Tablas de Producción) y otra denominada staging_dev (Tablas Replicas de Producción).
2)Me piden que en las 2 bases, se deben contener las mismas estructuras de tablas. staging_dev va a contener una tabla de mas denominada pv_header_control en el cual me van a quedar registrados todos los id que contenga la tabla pv_header de desarrollo y demás tablas de esta base. (Para esto realice un cruce entre la tabla pv_header_control y las demás tablas de desarrollo).
3)Los 2 primeros puntos hacen referencia a que cuando persona ingrese algún registro en alguna tabla de desarrollo, por la noche yo pueda dejar programada una tarea la cual me traiga únicamente los registros nuevos que se insertaron en desarrollo. (Para esto, lo realice mediante cursores ya que me piden que no utilice trigger.)Y para verificar cuales son los registros nuevos insertados en desarrollo, lo que hago es crear un campo en mi tabla pv_header_control, denominado FechaSSIS, el cual va a almacenar una fecha. Esto quiere decir que cuando me haya insertado los registros en mi tabla pv_header_control de staging_dev, automáticamente ese campo me va a quedar con fecha y los registros que aun no se hallan pasado van a contener en ese campo el valor NULL.
--Tabla pv_header_control
CREATE PROCEDURE sp_pv_header_control
AS
DECLARE @FechaTrigger SMALLDATETIME
DECLARE @CodOperacion INT
DECLARE @FechaSSIS SMALLDATETIME
DECLARE @SnCarga INT
DECLARE @id_pv INT
DECLARE @CodError INT
DECLARE @txt_error VARCHAR (50)
DECLARE cursor_pv_header_control CURSOR FOR
SELECT TOP 10000 sc.FechaTrigger, sc.CodOperacion, sc.FechaSSIS, sc.SnCarga, p.id_pv, sc.CodError, sc.txt_error FROM staging_dev.dbo.pv_header_control AS sc
RIGHT JOIN desarrollo.dbo.pv_header AS p ON (sc.id_pv = p.id_pv)
WHERE sc.id_pv IS NULL
FOR READ ONLY
OPEN cursor_pv_header_control
FETCH cursor_pv_header_control INTO @FechaTrigger, @CodOperacion, @FechaSSIS, @SnCarga, @id_pv, @CodError, @txt_error
BEGIN TRANSACTION
WHILE @@SQLSTATUS = 0
BEGIN
SET @FechaTrigger = GETDATE()
SET @CodOperacion = 1
SET @SnCarga = 0
INSERT staging_dev.dbo.pv_header_control
SELECT @FechaTrigger, @CodOperacion, @FechaSSIS, @SnCarga, @id_pv, @CodError, @txt_error
IF (@@ERROR <> 0)
BEGIN
PRINT 'Error al ejecutar la Tabla pv_header_control'
ROLLBACK TRANSACTION
RETURN
END
INSERT INTO #t1 VALUES(1, GETDATE(), 'pv_header_control')
FETCH cursor_pv_header_control INTO @FechaTrigger, @CodOperacion, @FechaSSIS, @SnCarga, @id_pv, @CodError, @txt_error
END
CLOSE cursor_pv_header_control
DEALLOCATE CURSOR cursor_pv_header_control
COMMIT TRANSACTION
--------------------------------------------------------------------------------------------------------------------------------
--Tabla pv_header
CREATE PROCEDURE sp_pv_header
AS
DECLARE @id_pv INT
DECLARE @cod_suc NUMERIC (3)
DECLARE @cod_ramo NUMERIC (2)
DECLARE @nro_pol INT
DECLARE @aaaa_endoso INT
DECLARE @nro_endoso NUMERIC (6)
DECLARE @cod_aseg INT
DECLARE @fec_emi SMALLDATETIME
DECLARE @fec_vig_desde SMALLDATETIME
DECLARE @fec_vig_hasta DATETIME
DECLARE @cod_moneda NUMERIC (2)
DECLARE @imp_cambio NUMERIC (9,4)
DECLARE @id_pv_modifica INT
DECLARE @cod_operacion INT
DECLARE @nro_solicitud NUMERIC (9)
DECLARE @nro_cotizacion NUMERIC (7)
DECLARE @nro_flota NUMERIC (7)
DECLARE @sn_impresion INT
DECLARE @sn_anula_automatica INT
DECLARE @cod_tipo_agente TINYINT
DECLARE @cod_agente INT
DECLARE @cod_grupo_endo NUMERIC (2)
DECLARE @cod_tipo_endo NUMERIC (2)
DECLARE @cod_sistema NUMERIC (2)
DECLARE @sn_cob_coas_total INT
DECLARE @id_pv_cero INT
DECLARE @fec_hora_desde SMALLDATETIME
DECLARE @sn_bancaseguros INT
DECLARE @cod_periodo_fact NUMERIC (2)
DECLARE @nro_pv_cero NUMERIC (9)
DECLARE @sn_fronting INT
DECLARE @cod_grupo NUMERIC (4)
DECLARE @nro_endo_modifica INT
DECLARE @nro_modifica_por INT
DECLARE @cod_tipo_asoc NUMERIC (2)
DECLARE @cod_aseg_consorcio INT
DECLARE @cnt_factu INT
DECLARE @id_pv_wkf INT
DECLARE cursor_pv_header CURSOR FOR
SELECT TOP 10000 p.* FROM staging_dev.dbo.pv_header_control AS sc
INNER JOIN desarrollo.dbo.pv_header AS p ON (sc.id_pv = p.id_pv)
WHERE sc.FechaSSIS IS NULL
FOR READ ONLY
OPEN cursor_pv_header
FETCH cursor_pv_header INTO @id_pv, @cod_suc, @cod_ramo, @nro_pol, @aaaa_endoso, @nro_endoso, @cod_aseg, @fec_emi, @fec_vig_desde, @fec_vig_hasta,
@cod_moneda, @imp_cambio, @id_pv_modifica, @cod_operacion, @nro_solicitud, @nro_cotizacion, @nro_flota, @sn_impresion,
@sn_anula_automatica, @cod_tipo_agente, @cod_agente, @cod_grupo_endo, @cod_tipo_endo, @cod_sistema, @sn_cob_coas_total,
@id_pv_cero, @fec_hora_desde, @sn_bancaseguros, @cod_periodo_fact, @nro_pv_cero, @sn_fronting, @cod_grupo, @nro_endo_modifica,
@nro_modifica_por, @cod_tipo_asoc, @cod_aseg_consorcio, @cnt_factu, @id_pv_wkf
-- BEGIN TRANSACTION
WHILE @@SQLSTATUS = 0
BEGIN
-- EXEC sp_pv_header
INSERT staging_dev.dbo.pv_header
SELECT @id_pv, @cod_suc, @cod_ramo, @nro_pol, @aaaa_endoso, @nro_endoso, @cod_aseg, @fec_emi, @fec_vig_desde, @fec_vig_hasta,
@cod_moneda, @imp_cambio, @id_pv_modifica, @cod_operacion, @nro_solicitud, @nro_cotizacion, @nro_flota, @sn_impresion,
@sn_anula_automatica, @cod_tipo_agente, @cod_agente, @cod_grupo_endo, @cod_tipo_endo, @cod_sistema, @sn_cob_coas_total,
@id_pv_cero, @fec_hora_desde, @sn_bancaseguros, @cod_periodo_fact, @nro_pv_cero, @sn_fronting, @cod_grupo, @nro_endo_modifica,
@nro_modifica_por, @cod_tipo_asoc, @cod_aseg_consorcio, @cnt_factu, @id_pv_wkf
IF (@@ERROR <> 0)
BEGIN
PRINT 'Error al ejecutar la Tabla pv_header'
-- ROLLBACK TRANSACTION
RETURN
END
INSERT INTO #t1 VALUES(1, GETDATE(), 'pv_header')
FETCH cursor_pv_header INTO @id_pv, @cod_suc, @cod_ramo, @nro_pol, @aaaa_endoso, @nro_endoso, @cod_aseg, @fec_emi, @fec_vig_desde, @fec_vig_hasta,
@cod_moneda, @imp_cambio, @id_pv_modifica, @cod_operacion, @nro_solicitud, @nro_cotizacion, @nro_flota, @sn_impresion,
@sn_anula_automatica, @cod_tipo_agente, @cod_agente, @cod_grupo_endo, @cod_tipo_endo, @cod_sistema, @sn_cob_coas_total,
@id_pv_cero, @fec_hora_desde, @sn_bancaseguros, @cod_periodo_fact, @nro_pv_cero, @sn_fronting, @cod_grupo, @nro_endo_modifica,
@nro_modifica_por, @cod_tipo_asoc, @cod_aseg_consorcio, @cnt_factu, @id_pv_wkf
END
CLOSE cursor_pv_header
DEALLOCATE CURSOR cursor_pv_header
ANEXO: Todos estos 3 puntos que acabo de mencionar y los 2 sp que estan observando, me ejecutan de manera satifactoria. Ahora el problema que necesito resolver es que cuando haya algun error en la mi tabla pv_header_control de staging_dev no siga ejecutando los demas procesos o inserciones en las demas tablas o sp. (Para esto utilice un condicional el cual validara que cuando hubiera un error en mi primer sp_pv_header_control no siguiera corriendo los demas procesos, hasta ahi me corre bien, pero si no ahi ningun error vuelva y entra al condicional del error, lo cual no deberia realizar ya que no hubo error y deberia ejecutar los demas o el siguiente sp_pv_header). Les agradeceria mucho y si me pueden colaborar con esta ultima parte de mi proceso condicinal.
BEGIN TRANSACTION
EXECUTE sp_pv_header_control
IF @@SQLSTATUS <> -2
BEGIN
PRINT 'Error al ejecutar la Tabla sp_pv_header_control'
ROLLBACK TRANSACTION
RETURN
END
ELSE
BEGIN
EXECUTE sp_pv_header
EXECUTE sp_pv_varios
EXECUTE sp_di_header
EXECUTE sp_di_reas
END
COMMIT TRANSACTION
Megustaria por favor y si me podrian colaborar con la siguiente consulta que estoy tratando de realizar en Sybase 12.5.
1)Tengo una Base de datos denominada desarrollo (Tablas de Producción) y otra denominada staging_dev (Tablas Replicas de Producción).
2)Me piden que en las 2 bases, se deben contener las mismas estructuras de tablas. staging_dev va a contener una tabla de mas denominada pv_header_control en el cual me van a quedar registrados todos los id que contenga la tabla pv_header de desarrollo y demás tablas de esta base. (Para esto realice un cruce entre la tabla pv_header_control y las demás tablas de desarrollo).
3)Los 2 primeros puntos hacen referencia a que cuando persona ingrese algún registro en alguna tabla de desarrollo, por la noche yo pueda dejar programada una tarea la cual me traiga únicamente los registros nuevos que se insertaron en desarrollo. (Para esto, lo realice mediante cursores ya que me piden que no utilice trigger.)Y para verificar cuales son los registros nuevos insertados en desarrollo, lo que hago es crear un campo en mi tabla pv_header_control, denominado FechaSSIS, el cual va a almacenar una fecha. Esto quiere decir que cuando me haya insertado los registros en mi tabla pv_header_control de staging_dev, automáticamente ese campo me va a quedar con fecha y los registros que aun no se hallan pasado van a contener en ese campo el valor NULL.
--Tabla pv_header_control
CREATE PROCEDURE sp_pv_header_control
AS
DECLARE @FechaTrigger SMALLDATETIME
DECLARE @CodOperacion INT
DECLARE @FechaSSIS SMALLDATETIME
DECLARE @SnCarga INT
DECLARE @id_pv INT
DECLARE @CodError INT
DECLARE @txt_error VARCHAR (50)
DECLARE cursor_pv_header_control CURSOR FOR
SELECT TOP 10000 sc.FechaTrigger, sc.CodOperacion, sc.FechaSSIS, sc.SnCarga, p.id_pv, sc.CodError, sc.txt_error FROM staging_dev.dbo.pv_header_control AS sc
RIGHT JOIN desarrollo.dbo.pv_header AS p ON (sc.id_pv = p.id_pv)
WHERE sc.id_pv IS NULL
FOR READ ONLY
OPEN cursor_pv_header_control
FETCH cursor_pv_header_control INTO @FechaTrigger, @CodOperacion, @FechaSSIS, @SnCarga, @id_pv, @CodError, @txt_error
BEGIN TRANSACTION
WHILE @@SQLSTATUS = 0
BEGIN
SET @FechaTrigger = GETDATE()
SET @CodOperacion = 1
SET @SnCarga = 0
INSERT staging_dev.dbo.pv_header_control
SELECT @FechaTrigger, @CodOperacion, @FechaSSIS, @SnCarga, @id_pv, @CodError, @txt_error
IF (@@ERROR <> 0)
BEGIN
PRINT 'Error al ejecutar la Tabla pv_header_control'
ROLLBACK TRANSACTION
RETURN
END
INSERT INTO #t1 VALUES(1, GETDATE(), 'pv_header_control')
FETCH cursor_pv_header_control INTO @FechaTrigger, @CodOperacion, @FechaSSIS, @SnCarga, @id_pv, @CodError, @txt_error
END
CLOSE cursor_pv_header_control
DEALLOCATE CURSOR cursor_pv_header_control
COMMIT TRANSACTION
--------------------------------------------------------------------------------------------------------------------------------
--Tabla pv_header
CREATE PROCEDURE sp_pv_header
AS
DECLARE @id_pv INT
DECLARE @cod_suc NUMERIC (3)
DECLARE @cod_ramo NUMERIC (2)
DECLARE @nro_pol INT
DECLARE @aaaa_endoso INT
DECLARE @nro_endoso NUMERIC (6)
DECLARE @cod_aseg INT
DECLARE @fec_emi SMALLDATETIME
DECLARE @fec_vig_desde SMALLDATETIME
DECLARE @fec_vig_hasta DATETIME
DECLARE @cod_moneda NUMERIC (2)
DECLARE @imp_cambio NUMERIC (9,4)
DECLARE @id_pv_modifica INT
DECLARE @cod_operacion INT
DECLARE @nro_solicitud NUMERIC (9)
DECLARE @nro_cotizacion NUMERIC (7)
DECLARE @nro_flota NUMERIC (7)
DECLARE @sn_impresion INT
DECLARE @sn_anula_automatica INT
DECLARE @cod_tipo_agente TINYINT
DECLARE @cod_agente INT
DECLARE @cod_grupo_endo NUMERIC (2)
DECLARE @cod_tipo_endo NUMERIC (2)
DECLARE @cod_sistema NUMERIC (2)
DECLARE @sn_cob_coas_total INT
DECLARE @id_pv_cero INT
DECLARE @fec_hora_desde SMALLDATETIME
DECLARE @sn_bancaseguros INT
DECLARE @cod_periodo_fact NUMERIC (2)
DECLARE @nro_pv_cero NUMERIC (9)
DECLARE @sn_fronting INT
DECLARE @cod_grupo NUMERIC (4)
DECLARE @nro_endo_modifica INT
DECLARE @nro_modifica_por INT
DECLARE @cod_tipo_asoc NUMERIC (2)
DECLARE @cod_aseg_consorcio INT
DECLARE @cnt_factu INT
DECLARE @id_pv_wkf INT
DECLARE cursor_pv_header CURSOR FOR
SELECT TOP 10000 p.* FROM staging_dev.dbo.pv_header_control AS sc
INNER JOIN desarrollo.dbo.pv_header AS p ON (sc.id_pv = p.id_pv)
WHERE sc.FechaSSIS IS NULL
FOR READ ONLY
OPEN cursor_pv_header
FETCH cursor_pv_header INTO @id_pv, @cod_suc, @cod_ramo, @nro_pol, @aaaa_endoso, @nro_endoso, @cod_aseg, @fec_emi, @fec_vig_desde, @fec_vig_hasta,
@cod_moneda, @imp_cambio, @id_pv_modifica, @cod_operacion, @nro_solicitud, @nro_cotizacion, @nro_flota, @sn_impresion,
@sn_anula_automatica, @cod_tipo_agente, @cod_agente, @cod_grupo_endo, @cod_tipo_endo, @cod_sistema, @sn_cob_coas_total,
@id_pv_cero, @fec_hora_desde, @sn_bancaseguros, @cod_periodo_fact, @nro_pv_cero, @sn_fronting, @cod_grupo, @nro_endo_modifica,
@nro_modifica_por, @cod_tipo_asoc, @cod_aseg_consorcio, @cnt_factu, @id_pv_wkf
-- BEGIN TRANSACTION
WHILE @@SQLSTATUS = 0
BEGIN
-- EXEC sp_pv_header
INSERT staging_dev.dbo.pv_header
SELECT @id_pv, @cod_suc, @cod_ramo, @nro_pol, @aaaa_endoso, @nro_endoso, @cod_aseg, @fec_emi, @fec_vig_desde, @fec_vig_hasta,
@cod_moneda, @imp_cambio, @id_pv_modifica, @cod_operacion, @nro_solicitud, @nro_cotizacion, @nro_flota, @sn_impresion,
@sn_anula_automatica, @cod_tipo_agente, @cod_agente, @cod_grupo_endo, @cod_tipo_endo, @cod_sistema, @sn_cob_coas_total,
@id_pv_cero, @fec_hora_desde, @sn_bancaseguros, @cod_periodo_fact, @nro_pv_cero, @sn_fronting, @cod_grupo, @nro_endo_modifica,
@nro_modifica_por, @cod_tipo_asoc, @cod_aseg_consorcio, @cnt_factu, @id_pv_wkf
IF (@@ERROR <> 0)
BEGIN
PRINT 'Error al ejecutar la Tabla pv_header'
-- ROLLBACK TRANSACTION
RETURN
END
INSERT INTO #t1 VALUES(1, GETDATE(), 'pv_header')
FETCH cursor_pv_header INTO @id_pv, @cod_suc, @cod_ramo, @nro_pol, @aaaa_endoso, @nro_endoso, @cod_aseg, @fec_emi, @fec_vig_desde, @fec_vig_hasta,
@cod_moneda, @imp_cambio, @id_pv_modifica, @cod_operacion, @nro_solicitud, @nro_cotizacion, @nro_flota, @sn_impresion,
@sn_anula_automatica, @cod_tipo_agente, @cod_agente, @cod_grupo_endo, @cod_tipo_endo, @cod_sistema, @sn_cob_coas_total,
@id_pv_cero, @fec_hora_desde, @sn_bancaseguros, @cod_periodo_fact, @nro_pv_cero, @sn_fronting, @cod_grupo, @nro_endo_modifica,
@nro_modifica_por, @cod_tipo_asoc, @cod_aseg_consorcio, @cnt_factu, @id_pv_wkf
END
CLOSE cursor_pv_header
DEALLOCATE CURSOR cursor_pv_header
ANEXO: Todos estos 3 puntos que acabo de mencionar y los 2 sp que estan observando, me ejecutan de manera satifactoria. Ahora el problema que necesito resolver es que cuando haya algun error en la mi tabla pv_header_control de staging_dev no siga ejecutando los demas procesos o inserciones en las demas tablas o sp. (Para esto utilice un condicional el cual validara que cuando hubiera un error en mi primer sp_pv_header_control no siguiera corriendo los demas procesos, hasta ahi me corre bien, pero si no ahi ningun error vuelva y entra al condicional del error, lo cual no deberia realizar ya que no hubo error y deberia ejecutar los demas o el siguiente sp_pv_header). Les agradeceria mucho y si me pueden colaborar con esta ultima parte de mi proceso condicinal.
BEGIN TRANSACTION
EXECUTE sp_pv_header_control
IF @@SQLSTATUS <> -2
BEGIN
PRINT 'Error al ejecutar la Tabla sp_pv_header_control'
ROLLBACK TRANSACTION
RETURN
END
ELSE
BEGIN
EXECUTE sp_pv_header
EXECUTE sp_pv_varios
EXECUTE sp_di_header
EXECUTE sp_di_reas
END
COMMIT TRANSACTION
Valora esta pregunta
0