Para se alterar a Tabela Empregado (mostrada a seguir) que s...
Para se alterar a Tabela Empregado (mostrada a seguir) que se encontra carregada no banco com os registros antes transcritos, foi criada uma função, denominada de ANALISAR, conforme o SQL (também mostrada a seguir).
Empregado |
matricula |
nome |
salario |
|
1 |
Jose |
10000 |
|
2 |
Carlos |
1000 |
|
3 |
Andre |
12000 |
|
4 |
Manuel |
1500 |
|
5 |
Carla |
9000 |
CREATE OR REPLACE FUNCTION ANALISAR(integer,integer) RETURNS bigint AS $$
UPDATE empregado SET salario=salario*matricula WHERE matricula>=$1 and matricula<=$2;
SELECT count(*) FROM EMPREGADO where matricula>=$1 and matricula<=$2;
$$ LANGUAGE 'sql';
Após ser efetuada a chamada ANALISAR(2,4) no banco de dados, quantos registros da Tabela Empregado foram afetados
pela função e quais são os salários de Jose e Manuel ao final da execução, respectivamente?
Gabarito comentado
Confira o gabarito comentado por um dos nossos professores
Alternativa correta: D - 3, 10000 e 6000.
Para resolver essa questão, precisamos compreender como a função criada no SQL interage com os dados da tabela Empregado e como as operações de UPDATE e SELECT funcionam.
A função ANALISAR recebe dois parâmetros do tipo inteiro, e realiza as seguintes ações de forma sequencial:
- Primeiro, a função executa um comando UPDATE na tabela Empregado, alterando o campo salario dos empregados cuja matrícula está entre os valores dos parâmetros ($1 e $2). O salário é atualizado para o valor atual multiplicado pelo número da matrícula.
- Em seguida, a função realiza um comando SELECT para contar quantos registros foram afetados pela operação de UPDATE, isto é, quantos registros possuem matrícula dentro do intervalo especificado.
Quando a função ANALISAR(2,4) é chamada, o comando UPDATE irá alterar o salário dos empregados com matrícula 2, 3 e 4. A multiplicação do salário pela matrícula resultará nos seguintes valores:
- Matrícula 2 (Carlos): 1000 * 2 = 2000
- Matrícula 3 (Andre): 12000 * 3 = 36000 (note que essa mudança não é relevante para a questão, pois o salário de Andre não é solicitado)
- Matrícula 4 (Manuel): 1500 * 4 = 6000
Portanto, três registros são afetados pela função, que são os empregados com matrículas 2, 3 e 4. O salário de Jose (matrícula 1) permanece inalterado, pois ele não está dentro do intervalo de matrículas especificado na chamada da função, continuando a ser 10000. Já o salário de Manuel (matrícula 4) é atualizado para 6000.
Isso nos leva à conclusão de que a alternativa D é a correta, pois três registros foram afetados (matrículas 2, 3 e 4), e os salários finais de Jose e Manuel são, respectivamente, 10000 e 6000.
Clique para visualizar este gabarito
Visualize o gabarito desta questão clicando no botão abaixo
Comentários
Veja os comentários dos nossos alunos
3 registros? é isso mesmo produção? alguem me dá uma luz?
WHERE matricula>=$1 and matricula<=$2;
WHERE matricula>=2 and matricula<=4;
ARRAY 2, 3 E 4
Carlos André e Manuel
Salário de José (1) - não se altera - 10000
Salário de Manuel (4) - dentro do array - se altera - salário * matrícula - 4*1500 = 6000
Gab: D
cade a tabela?
Clique para visualizar este comentário
Visualize os comentários desta questão clicando no botão abaixo