Uno de los pequeños inconvenientes que se me presento a la hora de usar PostgreSQL, fue el ir migrar mis Store Procedures, los cuales lo tengo en ASE (Adaptive Server Enterprise), esto con la finalidad de utilizar Power Builder para un proyecto que estoy desarrollando (por cuestiones de trabajo) y segun comentarios y experiencias con este gestor; es muy bueno y entonces decidi probarlo. En el proceso de aprendizaje tube que migrar algunos SP y de todas maneras me tube que aprender algo del Lenguaje procedural propio de PostgreSQL (PL/PgSQL) y la verdad me parecio muy interesante y no tan dicifil de manejar. Una forma simple de migrar un SP de ASE a PostgreSQL por ejemplo podriamos hacerlo de la siguiente forma:

Procediemiento Almacenado en ASE:

CREATE PROCEDURE dbo.sp_consult_contrib
@tipo char(3),
@valor varchar(100)

AS
BEGIN
  if @tipo = ‘RS’
  Begin
    Select num_ruc From snt$prin_contrib Where nom_rac_soc like @valor+’%’
  End
Else
Begin
    Select nom_rac_soc From snt$prin_contrib Where num_ruc = @valor
End
END

El Mismo Procediemiento en PostgreSQL:

CREATE OR REPLACE FUNCTION sp_consult_contrib(tipo char(3), valor varchar(100))
RETURNS varchar AS $$

DECLARE
  ruc char(11);
  razon varchar(100);
BEGIN
  IF tipo = ‘RS’ THEN
    Select num_ruc into ruc From snt$prin_contrib Where nom_rac_soc like valor || ‘%’;
    RETURN ruc;
  ELSE
    Select nom_rac_soc into razon From snt$prin_contrib Where num_ruc = valor;
    RETURN razon;
  END IF;
END;
$$ LANGUAGE plpgsql;

y la forma de llamarlo desde Power Builder seria mas o menos asi:

string ls_tipo, ls_valor, ls_val_proc
ls_tipo = ‘RUC’
ls_valor = ‘20809898121′
select * into :ls_val_proc from sp_consult_contrib(:ls_tipo,:ls_valor);

En este caso el valor devuelto se alamacena en ls_val_proc

Ahora estoy de proceso de migracion de otros SP, espero no se me complique la cosa pero asi como vamos me parece que todo va por buen camino :P