Em 15/01/09, Nilson Chagas<[email protected]> escreveu:
>
> Desculpa vir a lista para fazer este pedido, mas tenho uma procedure em
> Oracle e preciso converter ela para Postgresql.
> Postgresql é uma linguagem que conheço pouco, estou usando o que já conheço
> de banco de dados (outros), para este novo projeto (que tem um responsavel
> para configura ele no servidor).
>
> Se não for abusar demais, conto com a compreensão e ajuda, se estou fazendo
> algo errado por favor desconsiderar a mensagem.
>
> Esta é a procedure em oracle (esta procedure está dentro de uma package no
> oracle, por isto ela não começa com create or replace):
>  --==========================
>  -- Insere / Atualiza dados do modulo
>  --==========================
>  --==========================
> procedure SP_ATUALIZA_MODULO(n_id_modulo in MODULO.ID_MODULO%TYPE,
>                                 vc2_nom_modulo in MODULO.NOM_MODULO%TYPE,
>                                 vc2_desc_modulo in MODULO.DES_MODULO%TYPE,
>                                 n_erro out INTEGER,
>                                 vc2_msg_erro out varchar2)
>   is
>       n_tem_modulo INTEGER;
>   begin
>       n_erro := 0; -- Modulo cadastrado com sucesso
>
>       -- Novo modulo
>       if (n_id_modulo= 0) then
>
>                  insert into MODULO (NOM_MODULO,
>                                      DES_MODULO)
>                               values (vc2_nom_modulo,
>                                      vc2_desc_modulo);
>
>       -- Altera dados do modulo
>       else
>
>              select count(*)
>                into n_tem_modulo
>                from MODULO
>               where ID_MODULO      != n_id_modulo;
>
>              if (n_tem_modulo = 0) then
>
>                  update MODULO
>                     set NOM_MODULO   = vc2_nom_modulo,
>                           DES_MODULO = vc2_desc_modulo
>                   where ID_MODULO    = n_id_modulo;
>
>                  n_erro := 3; -- Modulo atualizado com sucesso
>
>              else
>
>                  n_erro := 2; -- Modulo ja existe
>
>              end if;
>
>       end if;
>
>       commit;
>
>       exception
>       when others then
>            rollback;
>            NULL;
>            n_erro := sqlcode; -- Erro ao cadastrar o modulo
>            vc2_msg_erro := sqlerrm;
>
>   END SP_ATUALIZA_MODULO;
>


Dê uma olhada neste capítulo do manual:
http://www.postgresql.org/docs/current/interactive/plpgsql-porting.html

Lembre-se que uma função no PostgreSQL é uma transação e não existem
transações aninhadas. Talvez SAVEPOINT possa atender sua necessidade:
http://www.postgresql.org/docs/current/interactive/sql-savepoint.html

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

Responder a