Engenharia Múltipla Escolha

Considering the following function : Which of the following code will work fine?

Considering the following function :

CREATE OR REPLACE FUNCTION get_avg_sal (p_dept_id number) RETURN number AS
    v_avg_sal number;
BEGIN
    SELECT avg(salary) INTO v_avg_sal FROM employees WHERE department_id = p_dept_id;
    UPDATE func_usages SET number_of_usage = number_of_usage+1;
    RETURN v_avg_sal;
END get_avg_sal;

Which of the following code will work fine?

  1. SELECT get_avg_sal(50) FROM dual;
  2. SELECT get_avg_sal('50') FROM dual;
  3. SELECT get_avg_sal(sysdate-hire_date) FROM employees WHERE employee_id = 100;
  4. None of them will work

Resolução completa

Explicação passo a passo

A
Alternativa A

Análise da Função

A função get_avg_sal recebe um parâmetro p_dept_id do tipo number e retorna a média salarial do departamento correspondente.

Análise das Opções

  • Opção A: SELECT get_avg_sal(50) FROM dual;
  • O parâmetro 50 é do tipo number, compatível com a definição da função.
  • Opção B: SELECT get_avg_sal('50') FROM dual;
  • O parâmetro '50' é uma string, mas pode ser implicitamente convertido para number pelo Oracle.
  • Opção C: SELECT get_avg_sal(sysdate-hire_date) FROM employees WHERE employee_id = 100;
  • sysdate - hire_date resulta em um valor do tipo number (dias decorridos), mas não é semanticamente correto para department_id.

Conclusão

Tanto A quanto B podem funcionar. A é a forma mais segura pois passa um número diretamente. B funciona devido à conversão implícita. C é sintaticamente válido mas semanticamente incorreto pois passa um cálculo de data como department_id.

Tem outra questão para resolver?

Resolver agora com IA

Mais questões de Engenharia

Ver mais Engenharia resolvidas

Tem outra questão de Engenharia?

Cole o enunciado, tire uma foto ou descreva o problema — a IA resolve com explicação completa em segundos.