FC ConcursosFC Concursos

Questão FC369582

Observe o seguinte script de criação da tabela “Empresa” e outros objetos em Oracle: CREATE TABLE empresa ( empresa_ID NUMBER(12) PRIMARY KEY, razao_social VARCHAR2(50) NOT NULL );

Sistema de Gerenciamento de Banco de Dados (SGBD)

FGV · 2024

Observe o seguinte script de criação da tabela “Empresa” e outros objetos em Oracle:

 

CREATE TABLE empresa (

    empresa_ID NUMBER(12) PRIMARY KEY,

    razao_social VARCHAR2(50) NOT NULL

);

 

CREATE SEQUENCE sq_empresa_pk

  START WITH 2

  INCREMENT BY 2

  NOMAXVALUE

  NOCACHE

  NOCYCLE;

 

CREATE OR REPLACE TRIGGER trg_bi_empresa

    BEFORE INSERT ON empresa

    FOR EACH ROW WHEN (NEW.empresa_ID IS NULL)

BEGIN

    SELECT sq_empresa_pk.NEXTVAL INTO

:NEW.empresa_ID FROM dual;

END;

 

Após a execução do script anteriormente apresentado, analise a execução dos seguintes comandos:

 

INSERT INTO empresa (empresa_ID, razao_social)

VALUES (NULL, 'AAA');

INSERT INTO empresa (razao_social) VALUES ('BBB');

INSERT INTO empresa (empresa_ID, razao_social)

VALUES (1, 'CCC');

INSERT INTO empresa (empresa_ID, razao_social)

VALUES (5, 'DDD');

INSERT INTO empresa (empresa_ID, razao_social)

VALUES (6, 'EEE');

INSERT INTO empresa (razao_social) VALUES

('FFF');

COMMIT;

 

Após a execução dos comandos apresentados, é correto afirmar que:

  1. foram inseridas 6 (seis) linhas e o número final para sq_empresa_pk.CURRVAL é igual a 6 (seis);
  2. nenhuma linha pode ser inserida e o número final para sq_empresa_pk.CURRVAL é igual a 2 (dois);
  3. foram inseridas 5 (cinco) linhas e o número final para sq_empresa_pk.CURRVAL é igual a 6 (seis);
  4. foram inseridas 5 (cinco) linhas e o número final para sq_empresa_pk.CURRVAL é igual a 4 (quatro);
  5. foram inseridas 4 (quatro) linhas e o número final para sq_empresa_pk.CURRVAL é igual a 4 (quatro).
Mostrar resposta e comentário

Gabarito

Certo

Comentário do professor

O script cria um TRIGGER que só atua quando NEW.empresa_ID IS NULL, e uma SEQUENCE iniciada em 2 com incremento 2, gerando \(2,4,6,\dots\).

Fluxo das inserções: 1) VALUES (NULL,'AAA') → trigger chama NEXTVAL = 2 → insere (2,'AAA').
2) INSERT (razao_social) 'BBB' → trigger chama NEXTVAL = 4 → insere (4,'BBB').
3) VALUES (1,'CCC') → id fornecido, trigger não dispara → insere (1,'CCC').
4) VALUES (5,'DDD') → insere (5,'DDD').
5) VALUES (6,'EEE') → insere (6,'EEE') (id fornecido, sequence não é usado).
6) INSERT ('FFF') → trigger chama NEXTVAL = 6 → tentativa de inserir id 6 causa violação de PK e essa inserção falha.

Resultado: foram efetivamente gravadas 5 linhas; apesar da última inserção ter falhado, o NEXTVAL já havia sido consumido, portanto CURRVAL da sequência vale 6.

Conteúdo do catálogo FC Concursos · Atualizado em

Continue aprendendo