[pgbr-geral] Ajuda para criar Store Procedure???

2009-01-15 Por tôpico Nilson Chagas
Pessoal,

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;


Desde já grato.

-- 
[]s
Nilson Chagas - Ubuntu User 25794
---
Visite:
http://www.amados.com.br/podcast
http://tempodesalvacao.blogspot.com/
http://bbnradio.org/
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] Ajuda para criar Store Procedure???

2009-01-15 Por tôpico Osvaldo Kussama
Em 15/01/09, Nilson Chagasnilson.chagas.si...@gmail.com 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
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral