SóProvas


ID
1902514
Banca
FGV
Órgão
IBGE
Ano
2016
Provas
Disciplina
Banco de Dados
Assuntos

No PostGreSQL, a linguagem PL/pgSQL pode ser utilizada para definir procedures que são executadas como triggers, quando várias “special variables” são criadas, no escopo do bloco mais externo, e tornam-se disponíveis para uso no código da procedure.

Nesse contexto, analise as seguintes afirmativas sobre algumas dessas variáveis e o funcionamento de triggers no PostgreSQL:

I. A variável NEW contém um valor booleano que indica se o registro objeto do trigger está sendo incluído (true) ou não (false).

II. A variável NEW contém os campos de um registro que está sendo incluído (insert) ou alterado (update).

III. A variável TG_OP contém uma string que determina o nome da operação que desencadeou o trigger (insert, update, etc.).

IV. Na declaração de um trigger, as opções FOR EACH ROW e FOR EACH STATEMENT são equivalentes, tendo sido mantidas apenas para efeito de compatibilidade com versões anteriores.

Está correto somente o que se afirma em:

Alternativas
Comentários
  • I. A variável NEW contém um valor booleano que indica se o registro objeto do trigger está sendo incluído (true) ou não (false). ERRADO

    new = Tipo de dado RECORD; variável contendo a nova linha do banco de dados, para as operações de INSERT/UPDATE nos gatilhos no nível de linha. O valor desta variável é NULL nos gatilhos no nível de instrução.

    II. A variável NEW contém os campos de um registro que está sendo incluído (insert) ou alterado (update). CORRETO conforme explicado em I

    III. A variável TG_OP contém uma string que determina o nome da operação que desencadeou o trigger (insert, update, etc.). CORRETO

    IV. Na declaração de um trigger, as opções FOR EACH ROW e FOR EACH STATEMENT são equivalentes, tendo sido mantidas apenas para efeito de compatibilidade com versões anteriores. ERRADO

    Um gatilho que está marcado FOR EACH ROW é chamado uma vez para cada linha que a operação modifica. Por exemplo, um comando DELETE afetando 10 linhas faz com que todos os gatilhos ON DELETE da relação de destino sejam chamados 10 vezes, uma vez para cada linha excluída. Diferentemente, um gatilho que está marcado FOR EACH STATEMENT somente executa uma vez para uma determinada operação, não importando quantas linhas sejam modificadas; em particular, uma operação que não modifica nenhuma linha ainda assim resulta na execução de todos os gatilhos FOR EACH STATEMENT aplicáveis.

    fonte:

    itens I, II e III: http://pgdocptbr.sourceforge.net/pg80/plpgsql-trigger.html

    item IV : http://pgdocptbr.sourceforge.net/pg82/sql-createtrigger.html

  • Prezados,

    O Item I está errado, a variável BOOLEAN que contém um valor booleano e não o NEW.
    O item II está correto,  o NEW referencia o que está sendo incluído ou alterado, e o OLD referencia o registro original, que está sendo alterado ou excluído.
    O Item III está correto, o TG_OP informa qual operação que disparou a trigger .
    O item IV está errado, as 2 declarações não são equivalentes, o for each row executa a cada linha, e o for each statement executa para cada operação, nos casos em que uma trigger é executada antes de um update ou insert no caso, o for each statement executaria duas vezes.

    Fonte : https://www.postgresql.org/docs/9.1/static/plpgsql...

    Portanto a alternativa correta é a letra C.

  • Quem não tem acesso:  - -> C