Para se alterar a Tabela Empregado (mostrada a seguir) que s...

Próximas questões
Com base no mesmo assunto
Q690235 Banco de Dados

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?

Alternativas

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