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:
- foram inseridas 6 (seis) linhas e o número final para sq_empresa_pk.CURRVAL é igual a 6 (seis);
- nenhuma linha pode ser inserida e o número final para sq_empresa_pk.CURRVAL é igual a 2 (dois);
- foram inseridas 5 (cinco) linhas e o número final para sq_empresa_pk.CURRVAL é igual a 6 (seis);
- foram inseridas 5 (cinco) linhas e o número final para sq_empresa_pk.CURRVAL é igual a 4 (quatro);
- 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