2009/7/28 Rogério A Bassete <[email protected]>

> Pessoal,
>
> Preciso dentro de uma PROCEDURE em PL/Tcl:
>
> spi_exec "SELECT currval('log.log_id_seq'::regclass)"
>
> Porém se a curval falhar, chamar outra PROCEDURE ao invés de abortar a
> PROCEDURE.
>
> Algo COMO:
>
> try {
> spi_exec "SELECT currval('log.log_id_seq'::regclass)"
> } finally {
>    spi_exec "SELECT nextval('log.log_id_seq'::regclass)"
> }
>
> Rogério Bassete
>
>
Rogério,

Só uma pequena brincadeira, mas com plpgsql:

create or replace function mycurrval(text) returns bigint as
$$
declare
  sSequenceName alias for $1;

  iValue bigint;
begin

  if not exists (select 1 from information_schema.sequences where
sequence_name = sSequenceName) then
    raise exception 'ERROR: Sequence % does not exists', sSequenceName;
  end if;

  begin
    iValue := currval(sSequenceName);
  exception
    when others then
      iValue := nextval(sSequenceName);
  end;

  return iValue;
end;
$$ language plpgsql;

postg...@bdteste=# select mycurrval('teste_sequencia_seq');
ERROR:  ERROR: Sequence teste_sequencia_seq does not exists

postg...@bdteste=# create sequence teste_sequencia_seq;
CREATE SEQUENCE

postg...@bdteste=# select mycurrval('teste_sequencia_seq');
 mycurrval
-----------
         1
(1 row)


Cordialmente,

-- 
Fabrízio de Royes Mello
>> Blog sobre PostgreSQL: http://fabriziomello.blogspot.com
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a