Вы находитесь на странице: 1из 10

USE [aquanet] GO /****** Object: Trigger [dbo].

[NIVEL_AGUA] ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO

Script Date: 09/29/2010 14:57:40

-- =========================================================== -- Author: <AUGUSTO BARROS - DELEGUE - INTERNET SOFTWARE> -- Create date: <6/5/2010> -- Description: <CALCULA SUPERIOR> -- =========================================================== ALTER TRIGGER [dbo].[NIVEL_AGUA] ON [dbo].[dados] AFTER INSERT AS BEGIN -- SET NOCOUNT ON added to prevent extra result sets from -- interfering with SELECT statements. SET NOCOUNT ON; DECLARE @SEQUENCIAL INT DECLARE @COD_PONTO INT DECLARE @GANHO FLOAT DECLARE @OFFSET FLOAT DECLARE @LEIT_SENSOR FLOAT DECLARE @AREA FLOAT DECLARE @NAMEDADOT FLOAT DECLARE @VOLUME_ANT FLOAT DECLARE @VOLUME_ANT_AUX FLOAT DECLARE @HR_LEIT_AUX_AUX DATETIME DECLARE @QT_NA_MEDIO_ADOT INT DECLARE @QT_Q_MEDIA INT DECLARE @HR_LEIT AS DATETIME DECLARE @HR_LEIT_AUX AS DATETIME DECLARE @HR_LEIT_ANT AS DATETIME DECLARE @HR_LEIT_AUX1 AS DATETIME DECLARE @QT_LIGDESLIG_BOMBA AS INT DECLARE @TX_PART_BOMBA AS FLOAT DECLARE @QT_PONTO_QMEDIA AS INT DECLARE @SEQUENCIALB AS INT DECLARE @HORA_LEITB AS DATETIME DECLARE @ST_BOMBAB AS VARCHAR(2) DECLARE @ST_BOMBAB1 AS VARCHAR(2) DECLARE @Q_MEDIAB AS FLOAT DECLARE @FLAG_LIG AS BIT = 0 DECLARE @CONT_LIG AS INT = 0 DECLARE @CONT_DES AS INT = 0 DECLARE @NA_MEDIA_ADOTB AS FLOAT DECLARE @VOLUMEB AS FLOAT DECLARE @Q_CONSUMO_MEDIO AS FLOAT DECLARE @Q_CONSUMO_MEDIO_BOMBA AS FLOAT DECLARE @QT_Q_CONSUMO_MEDIO INT DECLARE @TP_PT INT DECLARE @COD_PONTO_BOMBA INT DECLARE @VAZAO_BOMBA AS FLOAT

DECLARE @LEITURA_SENSOR AS FLOAT DECLARE @LEITURA_SENSOR_AUX AS FLOAT SELECT @SEQUENCIAL = i.sequencial, @COD_PONTO = i.cod_ponto, @LEIT_SENSOR = i.leitura_sensor, @GANHO = p.ganho, @OFFSET = p.offset, @QT_NA_MEDIO_ADOT = p.qtde_pt_na_med_adot, @QT_Q_MEDIA = p.qtde_pt_na_med_adot, @HR_LEIT = i.hora_leit, @AREA = p.vlr_area, @QT_LIGDESLIG_BOMBA = p.qtde_pt_liga_desliga_bomba, @TX_PART_BOMBA = p.tx_part_bomba, @QT_PONTO_QMEDIA = p.qtde_pt_q_med, @QT_Q_CONSUMO_MEDIO = p.qtde_pt_consumo_med, @TP_PT = p.tp_pt, @COD_PONTO_BOMBA = p.cod_ponto_bomba, @VAZAO_BOMBA = p.vazao_bomba FROM Inserted i inner join ponto_coleta p on p.cod_pon_col = i.cod_ponto UPDATE DADOS SET NIVEL_AGUA = ((@LEIT_SENSOR * @GANHO + @OFFSET) /1000.00) WHERE sequencial=@SEQUENCIAL DECLARE dados_cursor CURSOR SCROLL READ_ONLY FOR SELECT TOP (@QT_NA_MEDIO_ADOT + 1) VOLUME,HORA_LEIT FROM DADOS WHERE COD_PONTO = @COD_PONTO and HORA_LEIT <= @HR_LEIT AND NIVEL_AGUA IS NOT NULL ORDER BY HORA_LEIT DESC OPEN dados_cursor --FETCH NEXT FROM dados_cursor --FETCH NEXT FROM dados_cursor INTO @VOLUME_ANT,@HR_LEIT_AUX FETCH LAST FROM dados_cursor INTO @VOLUME_ANT_AUX,@HR_LEIT_AUX_AUX CLOSE dados_cursor DEALLOCATE dados_cursor SET @HR_LEIT_ANT = (SELECT top 1 HORA_LEIT FROM DADOS WHERE COD_PONTO = @COD_PONTO AND HORA_LEIT < @HR_LEIT order by HORA_LEIT desc) SET @VOLUME_ANT = (SELECT top 1 VOLUME FROM DADOS WHERE COD_PONTO = @COD _PONTO AND HORA_LEIT < @HR_LEIT order by HORA_LEIT desc) SET @NAMEDADOT = (SELECT (SUM(NIVEL_AGUA)/COUNT(NIVEL_AGUA)) FROM DADOS WHERE COD_PONTO = @COD_PONTO AND (HORA_LEIT BETWEEN @HR_LEIT_AUX_AUX AND @HR_LEI T) AND NIVEL_AGUA IS NOT NULL) UPDATE DADOS SET NA_MEDIA_ADOT = @NAMEDADOT, VAZAO = (((@VOLUME_ANT - (@NAMEDADOT * @AREA)) * 1000. 00) / (DATEDIFF(SECOND,@HR_LEIT_ANT,@HR_LEIT) / 60.00)), VOLUME = (@NAMEDADOT * @AREA) --, --aux = cast((DATEDIFF(SECOND,@HR_LEIT_ANT,@HR _LEIT) / 60.00) as varchar(30))

WHERE sequencial=@SEQUENCIAL DECLARE dados_cursor1 CURSOR SCROLL READ_ONLY FOR SELECT TOP (@QT_Q_MEDIA+1) HORA_LEIT FROM DADOS WHERE COD_PONTO = @COD_PONTO and HORA_LEIT <= @HR_LEIT AND VAZAO IS NOT NULL ORDER BY HORA_LEIT DESC OPEN dados_cursor1 FETCH LAST FROM dados_cursor1 INTO @HR_LEIT_AUX1 CLOSE dados_cursor1 DEALLOCATE dados_cursor1 UPDATE DADOS SET Q_MEDIA = (SELECT (SUM(VAZAO)/COUNT(VAZAO)) FROM DADOS W HERE COD_PONTO = @COD_PONTO AND (HORA_LEIT BETWEEN @HR_LEIT_AUX1 AND @HR_LEIT) A ND VAZAO IS NOT NULL), [MAXIMO] = (SELECT MAX(NA_MEDIA_ADOT) FROM DADOS WHERE CO D_PONTO = @COD_PONTO AND (HORA_LEIT BETWEEN @HR_LEIT_AUX1 AND @HR_LEIT) AND VAZA O IS NOT NULL), [MINIMO] = (SELECT MIN(NA_MEDIA_ADOT) FROM DADOS WHERE CO D_PONTO = @COD_PONTO AND (HORA_LEIT BETWEEN @HR_LEIT_AUX1 AND @HR_LEIT) AND VAZA O IS NOT NULL) WHERE sequencial=@SEQUENCIAL DECLARE cursor2 CURSOR SCROLL FOR SELECT TOP (@QT_LIGDESLIG_BOMBA) HORA_LEIT,ST_BOMBA,Q_MEDIA,NA_MEDIA_ADOT,VOLUME FROM DADOS WHERE COD_PONTO = @COD_PONTO and HORA_LEIT <= @HR_LEIT ORDER BY HORA_LEIT DESC FOR UPDATE OPEN cursor2 FETCH NEXT FROM cursor2 IF @@FETCH_STATUS = 0 FETCH NEXT FROM cursor2 INTO @HORA_LEITB,@ST_BOMBAB1,@Q_MEDIAB,@NA_MEDIA _ADOTB,@VOLUMEB SET @CONT_LIG = 0 SET @CONT_DES = 0 FETCH LAST FROM cursor2 INTO @HORA_LEITB,@ST_BOMBAB,@Q_MEDIAB,@NA_MEDIA_ ADOTB,@VOLUMEB WHILE @@FETCH_STATUS = 0 BEGIN IF @ST_BOMBAB1 = 'F' OR @ST_BOMBAB1 = 'OFF' BEGIN IF @Q_MEDIAB < 0 AND @Q_MEDIAB < @TX_PAR T_BOMBA SET @CONT_LIG = @CONT_LIG + 1 END IF @ST_BOMBAB1 = 'N' OR @ST_BOMBAB1 = 'ON'

BEGIN IF @Q_MEDIAB >= 0 AND @Q_MEDIAB >= @TX_P ART_BOMBA SET @CONT_DES = @CONT_DES + 1 END FETCH PRIOR FROM cursor2 INTO @HORA_LEITB,@ST_BOMBAB,@Q_ MEDIAB,@NA_MEDIA_ADOTB,@VOLUMEB END FETCH FIRST FROM cursor2 IF @CONT_LIG = @QT_LIGDESLIG_BOMBA BEGIN FETCH LAST FROM cursor2 INTO @HORA_LEITB,@ST_BOMBAB,@Q_MEDIAB,@N A_MEDIA_ADOTB,@VOLUMEB UPDATE DADOS SET ST_BOMBA = 'ON',Q_CONSUMO=NULL,Q_CONSUMO_MEDIO =NULL WHERE CURRENT OF cursor2 INSERT INTO ANALISE (COD_PONTO,vlr_hr_leit,st_bomba,nivel_reserv ,vol_reserv) VALUES(@COD_PONTO,@HORA_LEITB,'ON',@NA_MEDIA_ADOTB,@VOLUMEB) FETCH PRIOR FROM cursor2 WHILE @@FETCH_STATUS = 0 BEGIN UPDATE DADOS SET ST_BOMBA = 'N',Q_CONSUMO=NULL, Q_CONSUMO_MEDIO=NULL WHERE CURRENT OF cursor2 FETCH PRIOR FROM cursor2 END END IF @CONT_DES = @QT_LIGDESLIG_BOMBA BEGIN FETCH LAST FROM cursor2 INTO @HORA_LEITB,@ST_BOMBAB,@Q_MEDIAB,@N A_MEDIA_ADOTB,@VOLUMEB UPDATE DADOS SET ST_BOMBA = 'OFF',Q_CONSUMO=NULL,Q_CONSUMO_MEDI O=NULL WHERE CURRENT OF cursor2 INSERT INTO ANALISE (COD_PONTO,vlr_hr_leit,st_bomba,nivel_reserv ,vol_reserv) VALUES(@COD_PONTO,@HORA_LEITB,'OFF',@NA_MEDIA_ADOTB,@VOLUMEB) FETCH PRIOR FROM cursor2 WHILE @@FETCH_STATUS = 0 BEGIN UPDATE DADOS SET ST_BOMBA = 'F',Q_CONSUMO=Q_MED IA WHERE CURRENT OF cursor2 FETCH PRIOR FROM cursor2 END END IF @CONT_DES <> @QT_LIGDESLIG_BOMBA AND @CONT_LIG <> @QT_LIGDESLIG_BOMBA BEGIN IF @ST_BOMBAB1 = 'N' UPDATE DADOS SET ST_BOMBA = @ST_BOMBAB1 WHERE C URRENT OF cursor2 ELSE UPDATE DADOS SET ST_BOMBA = @ST_BOMBAB1,Q_CONSU MO=Q_MEDIA WHERE CURRENT OF cursor2 END CLOSE cursor2 DEALLOCATE cursor2

--SELECT -@SEQUENCIAL = i.sequencial, -@COD_PONTO = i.cod_ponto, -@HR_LEIT = i.hora_leit --FROM Inserted i DECLARE cursor3 CURSOR SCROLL READ_ONLY FOR SELECT TOP (@QT_Q_CONSUMO_MEDIO+1) HORA_LEIT FROM DADOS WHERE COD_PONTO = @COD_PONTO ORDER BY HORA_LEIT DESC OPEN cursor3 FETCH LAST FROM cursor3 INTO @HR_LEIT_AUX CLOSE cursor3 DEALLOCATE cursor3 SET @Q_CONSUMO_MEDIO = (SELECT (SUM(Q_CONSUMO)/COUNT(Q_CONSUMO)) FROM DADOS WHERE (COD_PONTO = @COD_PONTO) AND (HORA_LEIT BETWEEN @HR_LEIT_AUX AND @HR_LEIT) AND (Q_CONSUMO IS NOT NULL)) IF @Q_CONSUMO_MEDIO < 0 SET @Q_CONSUMO_MEDIO = 0 UPDATE DADOS SET Q_CONSUMO_MEDIO = @Q_CONSUMO_MEDIO WHERE sequencial=@SEQUENCIAL

---------------------------- Q_CONSUMO_MEDIO_BOMBA ---------------------------IF @TP_PT = 5 BEGIN DECLARE @RowsToProcess0 int DECLARE @CONT AS INT = 0 DECLARE @WHERE AS VARCHAR(500) = ''

DECLARE @tab4 table (RowID int identity(1,1),HR_LT DATETIME,leit_sen BIT) INSERT @tab4 (HR_LT,leit_sen) SELECT HORA_LEIT,LEITURA_SENSOR FROM CONTATO WHERE COD_PONTO = @COD_PONTO_BOMBA AND (FLAG_CALC=0) ORDER BY HORA_LEIT set @RowsToProcess0 = @@ROWCOUNT --set @WHERE = @WHERE + '@RowsToProcess0:' + cast(@RowsT oProcess0 as varchar(2)) + '-'

WHILE

@CONT < @RowsToProcess0 BEGIN SET @CONT = @CONT + 1 --set @WHERE = @WHERE + '@cont:' + cast(

@cont as varchar(2)) + '-' select @HORA_LEITB=HR_LT,@LEITURA_SENSOR =leit_sen from @tab4 where RowID=@CONT --set @WHERE = @WHERE + '@HORA_LEITB:' + cast(@HORA_LEITB as varchar(30)) + '-' IF @RowsToProcess0 > @CONT BEGIN select @HR_LEIT_AUX=HR_L T,@LEITURA_SENSOR_AUX=leit_sen from @tab4 where RowID=@cont+1 UPDATE DADOS SET STATUS_BOMBA = @LEITURA_ SENSOR, Q_BOMBA = @VAZAO_BOMBA, Q_CONSUMO_BOMBA = CASE @LEITURA_SENSOR WHEN 1 THEN (Q_M EDIA-@VAZAO_BOMBA) ELSE (Q_MEDIA) END WHERE COD_PONTO = @COD_P ONTO AND HORA_LEIT BETWEEN @H ORA_LEITB AND @HR_LEIT_AUX UPDATE CONTATO SET FLAG _CALC = 1 WHERE cod_ponto=@COD_PONTO_BOM BA and hora_leit=@HORA_LEIT B --set @WHERE = @WHERE + '@FLAG1:' + cast(@HORA_LEITB as varchar(30))+ '-' + cast(@HR_LEIT_AUX as varcha r(30)) + '-' + cast(@LEITURA_SENSOR as varchar(30)) + '-' END ELSE begin IF @RowsToProcess0 = 1 BEGIN UPDATE DADOS SET STATUS_B OMBA = @LEITURA_SENSOR, Q_BOMBA = @VAZAO_BOMBA, Q_CONSUM

O_BOMBA = CASE @LE ITURA_SENSOR WHEN 1 THEN (Q_MEDIA-@VAZAO_BOMBA) ELSE (Q_MEDIA) END WHERE CO D_PONTO = @COD_PONTO AND HORA _LEIT >= @HORA_LEITB AND Q_CO NSUMO_BOMBA IS NULL SET @HR_ LEIT_AUX = @HR_LEIT --set @W HERE = @WHERE + '--@FLAG2:' + cast(@HORA_LEITB as varchar(30))+ '-' + cast(@HR_ LEIT_AUX as varchar(30)) + '-' + cast(@LEITURA_SENSOR as varchar(30)) + '-' END ELSE BEGIN UPDATE DADOS SET STATUS_B OMBA = @LEITURA_SENSOR, Q_BOMBA = @VAZAO_BOMBA, Q_CONSUM O_BOMBA = CASE @LE ITURA_SENSOR WHEN 1 THEN (Q_MEDIA-@VAZAO_BOMBA) ELSE (Q_MEDIA) END WHERE CO D_PONTO = @COD_PONTO AND HORA _LEIT >= @HORA_LEITB SET @HR_ LEIT_AUX = @HR_LEIT --set @WHERE = @ WHERE + '++++@FLAG3:' + cast(@HORA_LEITB as varchar(30))+ '-' + cast(@HR_LEIT_A UX as varchar(30)) + '-' + cast(@LEITURA_SENSOR as varchar(30)) + '-' END end ********************** Q_COMSUMO_MEDIO_BOMBA ********************** ABRE CURSOR PARA CALCULO DO Q-CONSUMO

-----MEDIO-BOMBA *************

-- *************************************

declare @sql varchar(1000) DECLARE @HORA_LEITB_STR AS VARCHAR(25)= cast(DAY(@HORA_LEITB) as varchar(2)) + '/' + cast(MONTH(@HORA_LEITB) as varchar( 2)) + '/' + cast(YEAR(@HORA_LEITB) as varchar(4)) + ' ' + cast(DATEPART(hour,@HO RA_LEITB) as varchar(2)) + ':' + cast(DATEPART(minute,@HORA_LEITB) as varchar(2) ) DECLARE @HR_LEIT_AUX_STR AS VARCHAR(25) = cast(DAY(@HR_LEIT_AUX) as varchar(2)) + '/' + cast(MONTH(@HR_LEIT_AUX) as varc har(2)) + '/' + cast(YEAR(@HR_LEIT_AUX) as varchar(4)) + ' ' + cast(DATEPART(hou r,@HR_LEIT_AUX) as varchar(2)) + ':' + cast(DATEPART(minute,@HR_LEIT_AUX) as var char(2)) + ':59' IF (@RowsToProcess0 > 1) BEGIN Set @sql= 'SELECT HORA_LEIT FROM DADOS WHERE COD_PONTO = ' + CAST(@COD_PONTO AS VARCHAR(5)) + ' AND (HORA_LEIT BETWEEN convert(datetime,''' + @HORA_LEITB_STR + ''',103) time,''' + @HR_LEIT_AUX_STR + ''',103)) ORDER BY HORA_LEIT' --set @WHERE = @WHERE + '((((@FLAG5:' + @HORA_LEITB_STR + '-' + @HR_LEIT_AUX_STR + '-' END ELSE BEGIN Set @sql= 'SELECT HORA_LEIT FROM DADOS WHERE COD_PONTO = ' + CAST(@COD_PONTO AS VARCHAR(5)) + ' AND Q_CONSUMO_MEDIO_BOMBA IS NULL AND (HORA_LEIT BETWEEN convert(datetime,''' + @HORA_LEITB_STR + ''',103) time,''' + @HR_LEIT_AUX_STR + ''',103)) BY HORA_LEIT ' --set @WHERE = @WHERE + ')))@FLAG5:' + @HORA_LEITB_STR + '-' + @HR_LEIT_AUX_STR + '-' END DECLARE @RowsToProcess int DECLARE @CurrentRow int -- aqui ocorre a carga dos dados -- a quantidade e fundamental para o des empenho AND convert(date ORDER AND convert(date

-- inicio cursor Set @sql= 'DECLARE cursor00 SCROLL CURS OR FOR ' + @sql + ' FOR UPDATE' exec (@sql) OPEN cursor00 FETCH NEXT FROM cursor00 INTO @HORA_LEIT B WHILE @@FETCH_STATUS = 0 -- fim cursor --************************************ -- inicio table variable --DECLARE @table7 TABLE -(RowID int identity(1,1 ),HR_LT DATETIME) --INSERT @table7 (HR_LT) --exec (@sql) --SET @RowsToProcess = @@ROWCOUNT ----set @WHERE = @WHERE + '@RowsToProces s:' + cast(@RowsToProcess as varchar(2)) + '-' --SET @CurrentRow = 0 --WHILE @CurrentRow < @RowsToProcess --fim table variable BEGIN --SET @CurrentRow=@Curre ntRow+1 --set @WHERE = @WHERE + '@@CurrentRow:' + cast(@CurrentRow as varchar(2)) + '-' --set @HORA_LEITB = (sel ect HR_LT from @table7 WHERE RowID = @CurrentRow) --set @WHERE = @WHERE + ' @HORA_LEITB: ' + cast(@HORA_LEITB as Varchar(30))

DECLARE @dados_cursor5 T ABLE (HR_LT DATETIME) INSERT INTO @dados_curso r5 (HR_LT) SELECT TOP (@QT_Q_CONSU MO_MEDIO) HORA_LEIT FROM DADOS WHERE COD_PONTO = @COD_P

ONTO and HORA_LEIT <= @HORA_L EITB ORDER BY HORA_LEIT DESC SET @HR_LEIT_AUX1 = (SEL ECT MIN(HR_LT) FROM @dados_cursor5) delete from @dados_curso r5 --set @WHERE = 'xx:' + cast(@HR_LEIT_AUX1 as varchar(30))+ '-' SET @Q_CONSUMO_MEDIO_BOM BA = (SELECT (SUM(Q_CONSUMO_BOMBA)/COUNT(Q_CONSUMO_BOMBA)) FROM DADOS WHERE COD_PONTO = @COD_PONTO AND (HORA_LEIT BETWEEN @HR_LEIT_AUX1 AND @HORA_LEITB) AN D Q_CONSUMO_BOMBA IS NOT NULL ) IF @Q_CONSUMO_MEDIO_BOMB A < 0 SET @Q_CONSUMO_M EDIO_BOMBA = 0 UPDATE DADOS SET Q_CONSUMO_MEDIO_BOMBA = @Q_CONSUMO_MEDIO_BOMBA --, --AUX=@WHERE --WHERE COD_PONTO = @COD _PONTO --and HORA_LEIT = @HORA_ LEITB WHERE CURRENT OF cursor 00 FETCH NEXT FROM cursor00 INTO @HORA_LEITB END CLOSE cursor00 DEALLOCATE cursor00 END --update dados set aux=@where WHERE sequencial=@ SEQUENCIAL END END

Вам также может понравиться