Fórum O que tem de errado nesta função SQL? #620760
04/12/2023
0
Estou tentando criar a função abaixo para que seja retornado o salário líquido do funcionário:
CREATE OR ALTER FUNCTION fnSALARIO_LIQUIDO (
@ANOCOMP_N AS INTEGER,
@MESCOMP_N AS INTEGER,
@NROPERIODO_N AS INTEGER,
@CHAPA_S AS VARCHAR(20)
) RETURNS DECIMAL(18,4)
AS
BEGIN
DECLARE @RETORNO AS DECIMAL(18,4)
SET @RETORNO = (SELECT (ISNULL((SELECT SUM(X.VALOR) FROM PFFINANC X (NOLOCK)
INNER JOIN PEVENTO Y ON (Y.CODIGO = X.CODEVENTO AND Y.CODCOLIGADA = X.CODCOLIGADA)
WHERE X.CHAPA = A.CHAPA AND
X.ANOCOMP = @ANOCOMP_N AND X.MESCOMP = @MESCOMP_N AND X.NROPERIODO = @NROPERIODO_N
AND Y.PROVDESCBASE = ''P''), 0)
- ISNULL((SELECT SUM(X.VALOR) FROM PFFINANC X (NOLOCK)
INNER JOIN PEVENTO Y ON (Y.CODIGO = X.CODEVENTO AND Y.CODCOLIGADA = X.CODCOLIGADA)
WHERE X.CHAPA = A.CHAPA AND
X.ANOCOMP = @ANOCOMP_N AND X.MESCOMP = @MESCOMP_N AND X.NROPERIODO = @NROPERIODO_N
AND Y.PROVDESCBASE = ''D''), 0))
FROM PFUNC A
WHERE A.CHAPA = @CHAPA_S)
END
GO
SELECT A.CHAPA, A.NOME, SALARIO_LIQUIDO = dbo.fnSALARIO_LIQUIDO(2023, 11, 1, A.CHAPA)
FROM PFUNC A
WHERE A.CHAPA = ''00802''
Só que está retornando o erro:
Msg 455, Nível 16, Estado 2, Procedimento fnSALARIO_LIQUIDO, Linha 11 [Linha de Início do Lote 0]
The last statement included within a function must be a return statement.
Mensagem 4121, Nível 16, Estado 1, Linha 28
Cannot find either column "dbo" or the user-defined function or aggregate "dbo.fnSALARIO_LIQUIDO", or the name is ambiguous.
Como posso corrigir isso?
Grato.
Ilano Caldas
Curtir tópico
+ 0Post mais votado
04/12/2023
Imagino que tenha faltado apenas informar isso, acrescentando uma linha antes do END:
... return @retorno END
Arthur Heinrich
Gostei + 1
Mais Posts
05/12/2023
Ilano Caldas
Imagino que tenha faltado apenas informar isso, acrescentando uma linha antes do END:
... return @retorno END
Caramba, que barbeiragem a minha! Era isso mesmo Arthur.
Obrigado!
Gostei + 0
05/12/2023
Fernando Gaspar
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)