Questão nº 26
Questão de Tecnologia da Informação · FCC TRT22 2022 (nº 26)
Considere que um Analista está trabalhando em um banco de dados PostgreSQL aberto e funcionando em condições ideais. O Analista inseriu a seguinte sequência de comandos:
```
DROP TABLE I TRTContatos;
CREATE TABLE TRTContatos (
cod serial PRIMARY KEY,
orgao VARCHAR(255) NOT NULL,
email VARCHAR(255) NOT NULL,
descricao VARCHAR(255)
);
INSERT INTO
TRTContatos (orgao, email)
VALUES
('Ouvidoria','ouvidoria@trt22.jus.br:'),
('Escola Judicial','ejud@trt22.jus.br'),
('Corregedoria','secor@trt22.jus.br')
II ;
```
É correto afirmar que
- Ahaverá erro, pois não é possível fazer inserção de múltiplas linhas em tabelas do PostgreSQL.
- Bhaverá erro devido ao fato de as 3 linhas a serem inseridas na tabela TRTContatos não terem os 4 campos informados em CREATE TABLE.
- CI deve ser preenchido com IF EXISTS e II deve ser preenchido com RETURNING * para que as linhas inseridas sejam apresentadas. (alternativa correta)
- DI deve ser preenchido com ALL ROWS e II deve ficar sem nenhum preenchimento.
- Efaltou um _ entre cod e serial, pois o certo seria cod_serial PRIMARY KEY.
Resposta comentada
Gabarito Alternativa C
No PostgreSQL, é uma boa prática evitar erros ao apagar tabelas que podem não existir, e também é possível ver os dados que acabaram de ser inseridos, incluindo IDs gerados automaticamente.
-
Conceito-chave:
DROP TABLE IF EXISTS: Esta cláusula é usada para apagar uma tabela somente se ela existir, evitando um erro caso a tabela não esteja presente no banco de dados.INSERT ... RETURNING *: Após inserir dados, a cláusulaRETURNING *permite que o comandoINSERTretorne todas as colunas das linhas que foram acabaram de ser adicionadas, incluindo valores gerados automaticamente (como ocoddo tiposerial).
-
(A) Incorreta: O PostgreSQL permite sim a inserção de múltiplas linhas em um único comando
INSERT ... VALUES (...), como mostrado no exemplo. A sintaxe utilizada está correta para isso. -
(B) Incorreta: Não haverá erro. A coluna
codé do tiposerial, o que significa que seu valor é gerado automaticamente pelo banco de dados e não precisa ser fornecido noINSERT. A colunadescricaonão éNOT NULL, o que significa que ela aceita valoresNULLe, se não for especificada noINSERT, receberáNULLpor padrão. As colunasorgaoeemailsãoNOT NULLe estão sendo fornecidas. -
(C) Correta: Para o placeholder
I,IF EXISTSé a forma correta de evitar um erro caso a tabelaTRTContatosnão exista ao tentar apagá-la. Para o placeholderII,RETURNING *é a cláusula que fará com que o comandoINSERTretorne todas as colunas das linhas que foram inseridas, incluindo ocodgerado automaticamente, permitindo que o Analista veja os dados inseridos. -
(D) Incorreta: Não existe a cláusula
ALL ROWSpara o comandoDROP TABLE. SeIIficasse sem preenchimento, oINSERTseria executado, mas não apresentaria as linhas inseridas; ele apenas informaria o número de linhas afetadas. -
(E) Incorreta: A sintaxe
cod serial PRIMARY KEYestá perfeitamente correta no PostgreSQL.serialé um tipo de dado (na verdade, um pseudotipo que cria uma sequência e a associa à coluna) que define uma coluna de auto-incremento. Não é necessário nem correto usar um_entrecodeserial.
Fonte: FCC TRT22 2022 Analista Judiciário - Área Apoio Especializado - Especialidade Tecnologia da Informação (Caderno Tipo 1). Reproduzida para fins de estudo.