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

Reply via email to