Cláusulas FOR EACH ROW e FOR EACH STATEMENT de triggers são utilizadas para determinar se a execução de um gatilho será aplicada antes ou depois da operação de evento. Considerando as cláusulas de triggers, relacione adequadamente as colunas a seguir. 1. AFTER STATEMENT. 2. AFTER ROW. 3. BEFORE STATEMENT. 4. BEFORE ROW. ( ) Antes da conclusão da operação de evento sobre um único registro da tabela haverá um disparo do gatilho para cada registro afetado pelo comando. ( ) Após a conclusão da operação de evento sobre um ou mais registros, ou seja, um conjunto de tuplas, de acordo com o comando. ( ) Antes da conclusão da operação de evento, o gatilho será disparado e a operação do evento poderá afetar um ou mais registros, ou seja, um conjunto de tuplas, de acordo com o comando. ( ) Após a conclusão da operação de evento sobre somente um registro da tabela haverá um disparo do gatilho para cada registro afetado pelo comando. A sequência está correta em
- A)1, 2, 4, 3.
Errada, porque embaralha o conceito de BEFORE/AFTER e de ROW/STATEMENT.
- B)2, 3, 1, 4.
Errada, pois troca a ordem dos gatilhos e confunde disparo por linha com disparo por comando.
- C)3, 4, 2, 1.
Errada, porque associa as descrições às cláusulas de forma invertida.
- D)4, 1, 3, 2.
Certa, pois relaciona corretamente BEFORE ROW, AFTER STATEMENT, BEFORE STATEMENT e AFTER ROW.
Gabarito: D
Em triggers, a diferença principal está em dois eixos: o momento em que o gatilho dispara e o nível de abrangência da ação. O momento pode ser BEFORE (antes da operação) ou AFTER (depois da operação). Já a abrangência pode ser ROW, quando o gatilho roda para cada linha afetada, ou STATEMENT, quando roda uma vez para todo o comando, não importando quantas linhas ele atingiu. Na questão, a primeira descrição fala em disparo antes da conclusão da operação e para cada registro afetado. Isso é BEFORE ROW. A segunda diz que o disparo ocorre após a conclusão da operação sobre um ou mais registros, isto é, para o comando inteiro, então é AFTER STATEMENT. A terceira descreve um disparo antes da conclusão da operação, podendo atingir um ou mais registros, o que caracteriza BEFORE STATEMENT. A quarta fala em disparo após a conclusão sobre um único registro, para cada registro afetado, então é AFTER ROW. Por isso, a sequência correta fica 4, 1, 3, 2, que corresponde à alternativa D. Em termos de prova, pense assim: ROW = linha por linha; STATEMENT = uma vez por comando. BEFORE e AFTER só dizem se o gatilho entra antes ou depois do evento, sem mudar essa lógica. Se quiser um resumo de bolso: BEFORE ROW modifica ou valida linha a linha antes de gravar; AFTER ROW reage linha a linha depois; BEFORE STATEMENT prepara a operação como um todo; AFTER STATEMENT fecha a conta depois que o comando inteiro terminou.