Veja se o conteúdo do anexo é o que você está querendo ou serve como ponto
de partida.
Marcelo Melim
-----Mensagem Original-----
From: Dickson S. Guedes
Sent: Tuesday, May 07, 2013 11:14 AM
To: Comunidade PostgreSQL Brasileira
Subject: Re: [pgbr-geral] Select with lock.
_______________________________________________
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
DROP FUNCTION IF EXISTS selo_disponivel (INTEGER);
CREATE OR REPLACE FUNCTION selo_disponivel (par_tipo_de_selo_codigo INTEGER)
RETURNS TABLE
(
n_tipo_de_selo_codigo INTEGER,
n_serie VARCHAR(5),
n_numero INTEGER
)
AS
$BODY$
DECLARE
loc_r1 RECORD;
BEGIN
n_tipo_de_selo_codigo := par_tipo_de_selo_codigo;
n_serie := '';
n_numero := 0;
FOR loc_r1 IN
SELECT
tipo_de_selo_codigo,
serie,
numero
FROM
selo
WHERE
tipo_de_selo_codigo = par_tipo_de_selo_codigo AND
estado_do_selo_codigo = 1
ORDER BY
tipo_de_selo_codigo,
serie,
numero LIMIT 20
LOOP
BEGIN
UPDATE
selo
SET
estado_do_selo_codigo = 3
WHERE
tipo_de_selo_codigo = loc_r1.tipo_de_selo_codigo AND
serie = loc_r1.serie AND
numero = loc_r1.numero;
IF FOUND
THEN
n_serie := loc_r1.serie;
n_numero := loc_r1.numero;
EXIT;
END IF;
EXCEPTION
WHEN deadlock_detected THEN
CONTINUE;
END;
END LOOP;
RETURN NEXT;
END;$BODY$
LANGUAGE 'plpgsql';
_______________________________________________
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral