Duvida sintaxe em SQL - PostgresSql

05/05/2018

0

Ola, tenho tentado montar o esquema abaixo em sql no postgre mas não consegui.
Alguém expert por ai poderia me dizer como seria o correto?
.
Select
   CASE when (select id_tabela as id from tabela where campo = 'conteudo') <> null then
       update tabela set campo = conteudo where id_tabela = id
   ELSE	
      insert into tabela (campo) values (conteudo)
  END

.
Basicamente eu quero verificar: se um registro já existe eu modifico, senão incluo.
Alberto

Alberto

Responder

Posts

07/05/2018

Luiz Vichiatto

Select
   CASE when (select id_tabela as id from tabela where campo = 'conteudo') <> is not null then
       update tabela set campo = conteudo where id_tabela = id
   ELSE
      insert into tabela (campo) values (conteudo)
  END

Atenção pode ocorrer problemas, o "campo" da sua pesquisa pode estar populada com espaços, por exemplo, então atenção sobre este tipo de insert para que não tenha duplicação de itens desnecessariamente.

No site da documentação do postgreSQL pode ter mais detalhes, este é direto no item case https://www.postgresql.org/docs/9.2/static/functions-conditional.html
Responder

07/05/2018

Luiz Vichiatto

Corrigindo que foi "<>" indevidamente, desculpas!
Select
   CASE when (select id_tabela as id from tabela where campo = 'conteudo') is not null then
       update tabela set campo = conteudo where id_tabela = id
   ELSE
      insert into tabela (campo) values (conteudo)
  END
Responder

07/05/2018

Alberto

Olá, obrigado por comentar, mas a questao é que esse codigo que eu postei nao funciona, provavelmente porque a logica da linguagem sql está errada, gostaria de saber como implementar essa rotina com as instrucoes escritas numa logica que funcione no postgresql.
Responder

30/06/2018

Kleber Santos

Você precisa de uma Procedure, segue abaixo:

CREATE OR REPLACE FUNCTION corrige(conteudo varchar(50), novo_conteudo varchar(50)) RETURNS VOID AS $$
DECLARE
resultado cliente.cliente_id%TYPE;
BEGIN
SELECT INTO resultado cliente_id FROM cliente WHERE cliente_nome = conteudo;
IF NOT FOUND THEN
INSERT INTO cliente(cliente_nome) VALUES (novo_conteudo);
RAISE NOTICE 'MESSAGES: Insert realizado com sucesso';
ELSE
UPDATE cliente SET cliente_nome = novo_conteudo WHERE cliente_nome = conteudo;
RAISE NOTICE 'MESSAGES: Update realizado com sucesso';
END IF;
END;
$$LANGUAGE 'plpgsql';

Para chamar a Procedure:
SELECT * FROM corrige('Marco', 'Marcos');

Responder

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar