________________________________
 De: Ronei Heck <[email protected]>
Para: Heloisa Fernanda <[email protected]>; Comunidade PostgreSQL 
Brasileira <[email protected]> 
Enviadas: Sexta-feira, 13 de Setembro de 2013 16:02
Assunto: Re: [pgbr-geral] Incluir ou Alterar um Registro
 


>Olá! 
 
>Depende.. Se você estiver fazendo isso em uma PL/PGSQL pode fazer da 
seguinte forma:
 
>...
>UPDATE cadastro_qualquer SET descricao=’TESTE’, valor=50.00 WHERE 
codigo=1;

>IF NOT FOUND THEN

>INSERT INTO cadastro_qualquer 
(codigo,descricao,valor) VALUES (1,’TESTE’,50.00);

>END IF;
>...
 
Deu erro de sintaxe.
 
Um colega meu que usa sqlserver sugeriu desta 
forma:
 
IF (SELECT COUNT(1) FROM cadastro_qualquer WHERE codigo=1)
  UPDATE cadastro_qualquer SET descricao=’TESTE’, valor=50.00 WHERE 
codigo=1
ELSE
  INSERT INTO cadastro_qualquer (codigo,descricao,valor) VALUES 
(1,'TESTE',50.00);
 
Mas deu 
erro de sintaxe no IF.
 
Estou 
fazendo direto no pgadmin.
 
--
Olá Rodnei!

Você precisa criar uma FUNCTION[1] usando PL/PGSQL[2]. Veja um exemplo mais 
completo:

CREATE OR REPLACE FUNCTION usuario_assinatura_gravar(
_usuario_assinatura_id INTEGER
, _assinatura BYTEA
) RETURNS VOID AS
$$
DECLARE
BEGIN
-- TENTA ATUALIZAR
UPDATE usuario_assinatura SET assinatura=_assinatura WHERE 
usuario_id=_usuario_assinatura_id;
-- SE NAO TENTA INSERIR
IF NOT FOUND THEN
INSERT INTO usuario_assinatura VALUES (_usuario_assinatura_id, _assinatura);
END IF;
END;
$$
LANGUAGE 'PLPGSQL' VOLATILE SECURITY DEFINER;

[1] http://www.postgresql.org/docs/9.2/interactive/plpgsql-structure.html
[2] http://www.postgresql.org/docs/9.2/interactive/plpgsql.html


[]'s
Heloisa
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a