SóProvas


ID
1365763
Banca
FCC
Órgão
TRT - 13ª Região (PB)
Ano
2014
Provas
Disciplina
Banco de Dados
Assuntos

Em um ambiente de banco de dados Oracle 11g ideal, foram criadas duas tabelas por meio das instruções PL/SQL a seguir: 

CREATE TABLE orders (order_id NUMBER PRIMARY KEY, line_items_count NUMBER DEFAULT 0 ); CREATE TABLE lineitems (order_id REFERENCES orders, seq_no NUMBER, CONSTRAINT lineitems PRIMARY KEY(order_id,seq_no) );

Foi criada, relacionada às tabelas, a seguinte trigger, colocada em execução:


CREATE OR REPLACE TRIGGER lineitems_trigger 
  AFTER INSERT OR UPDATE OR DELETE ON lineitems 
  FOR EACH ROW
BEGIN 
  IF (INSERTING OR UPDATING) 
  THEN 
    UPDATE orders SET line_items_count = NVL(line_items_count,0)+1 
    WHERE order_id = :new.order_id;
  END IF; 
  IF (DELETING OR UPDATING)
  THEN
     UPDATE orders SET line_items_count = NVL(line_items_count,0)-1 
     WHERE order_id = :old.order_id;
  END IF;
END;
/

Em seguida, foram executadas as instruções abaixo, nesta ordem:

INSERT INTO orders (order_id) VALUES (78);
INSERT INTO orders(order_id) VALUES (92);
INSERT INTO lineitems (order_id, seq_no) VALUES (78,1);
INSERT INTO lineitems (order_id, seq_no) VALUES (78,2);
SELECT * FROM orders;




Considere:

I. Ao executar a instrução INSERT INTO orders (order_id) VALUES (78); a trigger incrementou o valor contido no campo line_items_count passando de 0 para 1.

II. Ao executar a instrução INSERT INTO lineitems (order_id, seq_no) VALUES (78,1); a trigger incrementou o valor contido no campo line_items_count da tabela orders passando de 0 para 1.

III. Ao executar a instrução INSERT INTO lineitems (order_id, seq_no) VALUES (78,2); a trigger incrementou o valor contido no campo line_items_count da tabela orders passando de 1 para 2.

IV. A instrução SELECT * FROM orders; mostrará no campo line_items_count da linha cujo order_id é 78 o valor 3.

Está correto o que consta APENAS em

Alternativas
Comentários
  • NVL é um função de 2 parâmetros que tem por objetivo testar o primeiro parâmetro, se o mesmo for nulo, então retornará o valor do segundo parâmetro caso contrário retorna o valor do primeiro parâmetro. Fonte: http://rodrigowoliveira.blogspot.com.br/2012/08/funcoes-nvl-e-nvl2-do-oracle.html

  • LETRA D

    O segredo da questão é entender que a trigger só é executada após o INSERT  na tabela lineitems. No primeiro insert  o line_items_count da tabela orders soma +1 e no segundo insert incrementa + 1 no line_items_count passando de 1 para 2.

  • NVL (Null Value Logic)

    A função NVL permite substituir valores nulos com um valor padrão. Se o valor do primeiro parâmetro for nulo, a função retorna o valor no segundo parâmetro. Se o primeiro valor é não nulo, a função retorna o primeiro valor.

    ·         Ex: NVL(comissao,2) –> Quando comissao for nulo, retorna o valor 2; Se comissao for não nulo, retorna comissao.

     

    NVL2

    A função NVL2 aceita três parâmetros. Se o primeiro valor do parâmetro não é nulo ele devolve o valor do segundo parâmetro. Se o primeiro valor do parâmetro é null, ele retorna o terceiro parâmetro.