quinta-feira, 8 de maio de 2014

O PostgreSQL Não Implementa o comando INSERT com a Cláusula SET

Você já utilizou a cláusula SET em um comando INSERT?  No postgresql, com certeza, não, pois a mesma não está implementada até a versão atual, a 9.3. Esta sintaxe pode ser descrita conforme aparece abaixo:
 

INSERT INTO nome_tabela SET coluna1 = expressão1, coluna2 = expressão2, .... ;
 
O fato é que esta sintaxe pouco acrescentaria em termos de valor. É pouco conhecida e pouco utilizada, embora eu acredite que esteja implementada em outros SGBDs. Sua funcionalidade seria idêntica à do comando INSERT já implementado, agregando possivelmente um pouco em termos de compatibilidade, embora não me recorde de ferramentas ou sistemas que utilizem esta sintaxe nas minhas andanças. 

Então porque estou comentando o fato do postgresql não implementar esta sintaxe?

Bom, justifico esta postagem por ter encontrado esta sintaxe em provas de concursos públicos, como nos exemplos abaixo. Não sei se a cláusula SET no INSERT faz parte do padrão ISO, mas não deixa de ser uma limitação, ainda que bem pequena.
 
Exemplos: 

Prova: FCC - 2012 - MPE-PE - Analista Ministerial - Informática
Disciplina: Banco de Dados | Assuntos: SQL;

Após a execução dos seguintes comandos SQL:

CREATE TABLE livros (id INT, nome TEXT);
INSERT INTO livros VALUES(1,'livro 1');
INSERT INTO livros (2,'livro 2');
INSERT INTO livros SET id=3,nome='livro 3';
SELECT id FROM livros;

O resultado da consulta para a coluna id será 
 
a) 3, apenas. b) 1, apenas. c) 1, 2 e 3. d) 2 e 3, apenas. e) 1 e 3, apenas.


Prova: FCC - 2012 - MPE-PE - Técnico Ministerial - Informática
Disciplina: Banco de Dados | Assuntos: SQL;

Analise os seguintes comandos em SQL:

CREATE TABLE nota (id INT PRIMARY KEY,data TEXT,valor REAL);
INSERT INTO nota SET id=1,data='01012012',valor=15.5;
INSERT INTO nota SET id=1,data='03022012',valor=11.5;
INSERT INTO nota SET id=2,data='01042012',valor=25.5;
INSERT INTO nota SET id=20,data='10062012',valor=12.5;
SELECT COUNT(*) FROM nota WHERE valor < 20;

O resultado para a consulta efetuada será: 
 
a) 12.5 b) 3 c) 11.5, 12.5 e 15.5 d) 2 e) 12.5 e 15.5
 
 

Nenhum comentário: