SóProvas


ID
2518330
Banca
FCC
Órgão
TRE-PR
Ano
2017
Provas
Disciplina
Banco de Dados
Assuntos

Considere a existência de um procedure escrito em PL/SQL denominado verifica_votacao, que aceita dois parâmetros: um para a string do ID do candidato e outro para o número de votos obtidos em uma eleição.


CREATE OR REPLACE PROCEDURE verifica_votacao(id_do_cand NUMBER, num_vot_cand NUMBER) IS /* implementação do restante do procedure */

Um DBA Oracle criou um trigger verifica_votacao_trg na tabela candidatos que é acionado antes de uma operação INSERT ou UPDATE. Em cada linha o trigger deve chamar o procedure verifica_votacao para executar a lógica de negócios e deve especificar o novo ID de candidato e o novo número de votos para os parâmetros do procedure.


CREATE OR REPLACE TRIGGER verifica_votacao_trg

...I ... INSERT OR UPDATE OF id_cand, num_vot

ON candidatos

FOR EACH ROW

BEGIN

verifica_votacao(..II ..);

END;

/

SHOW ERRORS


As lacunas I e II devem ser preenchidas, correta e respectivamente, por

Alternativas
Comentários
  • Essa questão trata na sintaxe de TRIGGER. Perceba que temos algumas opções de execução: AFTER, INSTEAD OF e BEFORE. Cada uma dessas palavras faz com que o gatilho seja executado depois, ao invés de e antes do comando. Na questão o DBA especificou que o comando deve ser executado antes de cada operação de INSERT ou UPDATE. Sendo assim temos que optar pelo BEFORE.

    O outro ponto que podemos observar é quanto ao uso dos valores das respectivas tuplas atualizadas. Podemos usar os valores anteriores ou novos, para tal, usamos as palavras reservadas :old e :new. Pelo texto da questão, foi solicitado o uso da referência ao novo valor, sendo portanto, utilizado os termos :new.id_cand e :new.num_vot, separados por vírgula.

    Fonte: https://www.estrategiaconcursos.com.br/blog/prova-da-semana-comentario-da-prova-da-tre-pr-analise-de-sistemas-banco-de-dados-e-bi

  • e-

    CREATE OR REPLACE PROCEDURE verifica_votacao (nome do procedure) (id_do_cand NUMBER, num_vot_cand NUMBER (2 variaveis do tipo NUMBER) IS

    CREATE OR REPLACE TRIGGER verifica_votacao_trg

    BEFORE INSERT OR UPDATE OF id_cand, num_vot (before verifica antes de insert ou update)

    ON candidatos (nome da tabela)

    FOR EACH ROW

    BEGIN

     verifica_votacao(..II ..); id_cand, num_vot(os campos da tabela sao id_cand, num_vot. Mas como se trata de um trigger, usam-se :old para valores antigo e :new p/ novos). 

    END; /

    SHOW ERRORS