Fórum O que tem de errado nesta função SQL? #620760

04/12/2023

0

Olá pessoal,

Estou tentando criar a função abaixo para que seja retornado o salário líquido do funcionário:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
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

Ilano Caldas

Responder

Post mais votado

04/12/2023

Como a mensagem de erro informa, claramente, quando definimos uma function, temos que retornar o valor que a function gera.

Imagino que tenha faltado apenas informar isso, acrescentando uma linha antes do END:

1
2
3
  ...
  return @retorno
END

Arthur Heinrich

Arthur Heinrich
Responder

Gostei + 1

Mais Posts

05/12/2023

Ilano Caldas

Como a mensagem de erro informa, claramente, quando definimos uma function, temos que retornar o valor que a function gera.

Imagino que tenha faltado apenas informar isso, acrescentando uma linha antes do END:

1
2
3
  ...
  return @retorno
END



Caramba, que barbeiragem a minha! Era isso mesmo Arthur.
Obrigado!
Responder

Gostei + 0

05/12/2023

Fernando Gaspar

Boooa as vezes os detalhes passam desapercebidos..
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar