Formula na SP
23/05/2012
0
Possuo uma SP onde gostaria de implementar uma formula matemática na mesma.
A formula é a seguinte
6371*ACOS(COS(PI()*(90-@P2La)/180)*COS((90-@P1La)*PI()/180)+SEN((90-@P2La)*PI()/180)*SEN((90-@P1La)*PI()/180)*COS((@P1Lo-@P2Lo)*PI()/180))
Onde o resultado seria gravada em uma variável na SP, (@IntervaloAtual)
Set @IntervaloAtual = 6371*ACOS(COS(PI()*(90-@P2La)/180)*COS((90-@P1La)*PI()/180)+SEN((90-@P2La)*PI()/180)*SEN((90-@P1La)*PI()/180)*COS((@P1Lo-@P2Lo)*PI()/180))
A SP recebe
@P1La;
@P1Lo;
@P2La;
@P2Lo;
Eu comparo o resultado de @IntervaloAtual com um resultado que busquei no banco de dados anteriormente, e se for diferente em mais de 7 eu gravo a informação no banco.
A duvida é como implementar a formula na SP e se isto é realmente possível.
Segue um exemplo
@P1La= 25,413596
@P1Lo= 49,250524
@P2La= 25,410299
@P2Lo= 49,253407
@IntervaloAtual= 0,467169
Fabiano Elias
Posts
23/05/2012
Joel Rodrigues
Você pode usar a função BETWEEN:
...
@IntervaloAtual BETWEEN (VALOR-7) AND (VALOR+7)
...
24/05/2012
Fabiano Elias
Primeiramente muito obrigado pela atenção.
O banco esta em casa com a formula, quando coloco a formula o SQL retorna um erro tipo invalido na linha onde seto a formula.
Hoje a noite eu pego o erro e posto aqui.
Novamente grato pela atenção e paciência.
26/05/2012
Fabiano Elias
Segue exatamente como estou montando minha SP
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go
ALTER PROCEDURE [dbo].[SP_MONITORAMENTO]
(
@RAS_ID VARCHAR(10),
@P1La CHAR(9),
@P1Lo CHAR(9)
)
AS
DECLARE @DISTANCIA FLOAT
DECLARE @P2La CHAR(9)
DECLARE @P2Lo CHAR(9)
SET @P2La = (SELECT MON_LATITUDE FROM dbo.T_MONITORAMENTO GROUP BY MON_LATITUDE HAVING (MAX(RAS_ID) = @RAS_ID))
SET @P2Lo = (SELECT MON_LONGITUDE FROM dbo.T_MONITORAMENTO GROUP BY MON_LONGITUDE HAVING (MAX(RAS_ID) = @RAS_ID))
SET @DISTANCIA=6371*ACOS(COS(PI()*(90-@P2La)/180)*COS((90-@P1La)*PI()/180)+SEN((90-@P2La)*PI()/180)*SEN((90-@P1La)*PI()/180)*COS((@P1Lo-@P2Lo)*PI()/180))
PRINT(@P1La)
PRINT(@P2Lo)
Retorno quando tento salvar a SP
Msg 195, Level 15, State 10, Procedure SP_MONITORAMENTO, Line 17
SEN is not a recognized built-in function name.
O SQL não esta reconhecendo a função SEN na formula.
26/05/2012
Fabiano Elias
Segue a SP com as alterações... funcionando
ALTER PROCEDURE [dbo].[SP_MONITORAMENTO]
(
@RAS_ID VARCHAR(10),
@P1La float,
@P1Lo float
)
AS
DECLARE @DISTANCIA FLOAT
DECLARE @P2La float
DECLARE @P2Lo float
SET @P2La = (SELECT MON_LATITUDE FROM dbo.T_MONITORAMENTO GROUP BY MON_LATITUDE HAVING (MAX(RAS_ID) = @RAS_ID))
SET @P2Lo = (SELECT MON_LONGITUDE FROM dbo.T_MONITORAMENTO GROUP BY MON_LONGITUDE HAVING (MAX(RAS_ID) = @RAS_ID))
--SET @DISTANCIA=6371*ACOS(COS(PI()*(90-@P2La)/180)*COS((90-@P1La)*PI()/180)+SEN((90-@P2La)*PI()/180)*SEN((90-@P1La)*PI()/180)*COS((@P1Lo-@P2Lo)*PI()/180))
SET @DISTANCIA=(6371*ACOS(COS(PI()*(90-@P2La)/180)*COS((90-@P1La)*PI()/180)+SIN((90-@P2La)*PI()/180)*SIN((90-@P1La)*PI()/180)*COS((@P1Lo-@P2Lo)*PI()/180)))
PRINT(@P1La)
PRINT(@P2Lo)
print (@DISTANCIA)
26/05/2012
Joel Rodrigues
Clique aqui para fazer login e interagir na Comunidade :)