Array
(
)

Formula na SP

Fabiano Elias
   - 23 mai 2012

Boa tarde.
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

Joel Rodrigues
   - 23 mai 2012

Não entendi tua dúvida. A fórmula já está aí, pronta, a variável @IntervaloAtual já está recebendo o valor calculado. Qual o problema? Seria a comparação?
Você pode usar a função BETWEEN:
...
@IntervaloAtual BETWEEN (VALOR-7) AND (VALOR+7)
...

0
|
0

Fabiano Elias
   - 24 mai 2012

Bom dia.

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.

0
|
0

Fabiano Elias
   - 26 mai 2012

Boa noite

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.

0
|
0

Fabiano Elias
   - 26 mai 2012

Resolvido o problema

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)

0
|
0

Joel Rodrigues
   - 26 mai 2012

Opa, que bom que conseguiu resolver. Obrigado por compartilhar a solução com a comunidade.

0
|
0