Questão FC372900
Considere o código PL/SQL abaixo. DECLARE PROCEDURE calc ( vendas NUMBER, quota NUMBER, emp_id NUMBER ) IS bonus NUMBER := 0; BEGIN IF vendas > (quota + 200) THEN bonus := (vendas
Linguagem SQL
FCC · 2018
Considere o código PL/SQL abaixo.
DECLARE
PROCEDURE calc (
vendas NUMBER,
quota NUMBER,
emp_id NUMBER
)
IS
bonus NUMBER := 0;
BEGIN
IF vendas > (quota + 200) THEN
bonus := (vendas - quota)/4;
ELSE
bonus := 50;
END IF;
DBMS_OUTPUT.PUT_LINE('bônus = ' || bonus);
UPDATE tabEmpregados
SET salario = salario + bonus
WHERE empregado_id = emp_id;
END calc;
BEGIN
calc(10100, 10000, 120);
calc(12000, 10000, 121);
END;
/
Ao executar o código acima no Oracle 12c em condições ideais, o resultado será
- bônus = 0 bônus = 50
- bônus = 50 bônus = 500
- bônus = 50 bônus = 3000
- bônus = 0 bônus = 500
- um erro de execução, pois deveria ser usado o comando SELECT e não UPDATE.
Mostrar resposta e comentário
Gabarito
B
Comentário do professor
Ao executar o bloco, a primeira chamada calc(10100, 10000, 120) atribui vendas=10100 e quota=10000. A condição IF vendas > (quota + 200) verifica se 10100 > 10200 — é falsa, portanto entra no ELSE e define bonus = 50. Em seguida é executado DBMS_OUTPUT.PUT_LINE('bônus = ' || bonus), exibindo "bônus = 50".
Na segunda chamada calc(12000, 10000, 121) temos vendas=12000 que satisfaz 12000 > 10200, logo o bloco IF é executado e calcula bonus como \( (12000-10000)/4 = 2000/4 = 500 \). Novamente DBMS_OUTPUT.PUT_LINE imprime "bônus = 500". Cada chamada também realiza o UPDATE que acrescenta o respectivo bônus ao salário do empregado informado.
Conteúdo do catálogo FC Concursos · Atualizado em