1
resposta

[Dúvida] O instrutor falso não roda

Ao criar a Function cria_instrutor_falso o programa não roda e retorna a seguinte mensagem:

ERROR:  return type mismatch in function declared to return instrutor
DETAIL:  Final statement returns integer instead of numeric at column 3.
CONTEXT:  SQL function "cria_instrutor_falso"
SQL state: 42P13

O código é esse:

CREATE FUNCTION cria_instrutor_falso() RETURNS instrutor AS $$

    SELECT 22,'Nome Falso',200
$$ LANGUAGE SQL;

Obrigado ! Fiz também a opção que aparece a seguir:

CREATE FUNCTION cria_instrutor_falso() RETURNS instrutor AS $$
    /*SELECT 22 AS id, 'Nome Falso' AS nome, 200.0 AS salario*/
    SELECT 22,'Nome Falso',200
$$ LANGUAGE SQL;

E mensagem devolvida foi a seguinte:

ERROR:  return type mismatch in function declared to return instrutor
DETAIL:  Final statement returns integer instead of numeric at column 3.
CONTEXT:  SQL function "cria_instrutor_falso"
SQL state: 42P13
1 resposta

Oi, Ricardo! Tudo certo?

Desde já, peço desculpas pela demora em te responder.

Este erro está ocorrendo em virtude do número 200, o qual faz referência ao campo salario da tabela instrutor. Como o salário é do tipo DECIMAL, é importante que o 200 também seja identificado dessa forma — caso contrário, ele será interpretado como um número inteiro.

Sendo assim, podemos utilizar a sintaxe ::DECIMAL após o número 200 a fim de convertê-lo para decimal. Ao adicionar isso no script SQL de criação da função, chegamos no seguinte resultado:

CREATE FUNCTION cria_instrutor_falso () RETURNS instrutor AS $$
    SELECT 22, 'nome_falso', 200::DECIMAL;
$$ LANGUAGE SQL;

Dessa forma, a função será criada com sucesso!

Espero ter ajudado, Ricardo. Fico à disposição caso o problema persista ou surjam novas dúvidas.

Um forte abraço!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!