[Pgsql-ayuda] store procedures

Sandrigo Lezcano alkafes@yahoo.com
Mon, 7 Jul 2003 10:42:40 -0500 (CDT)


algo q no me queda claro (ufff  varios..)

basandome en el capitulo 19.11.x 'Porting from Oracle
PL/SQL'

entiendo que: (asumo que... favor confimar)

1.mis procedures los convierto a function.
2.si tengo dos o mas valores tipo OUT/INOUT los 
convierto en tantas funciones sea necesaria
para devolverme dichos resultados.
3. el tipo de valor devuelto por estas pr_functions
seria VOID ...???? (la mayorìa realizan select, update
y delete pero no devuelven nada.) 
4. aunque sean functions, lo mismo los ejecuto
desde el cliente (PowerBuilder) con:

EXECUTE funcion_nombre (lista_de_parametros_IN ...)

en el manual 19.11.3 retorna integer... tb se los
ejecuta com EXECUTE..??? (en el cliente)

5. No he visto que pueda usar labels para una loop
en Pg. (ejemplo abajo)

6. Alvaro mencionó que Pg no tiene SQLSTATE
que creo que podría manejarlo como el ej. 19.11.3
 ---  pero todavía me cuesta muchísimo pensarlo o
      modelarlo para PostgreSQL. -------


   Para lo cual anexo una copia de unos de los
   procedimientos en Sybase y (todos utilizan 
el mismo model) Cualquier comentario
   sugerencia sería de GRANDIOSÍSIMA AYUDA...


ALTER PROCEDURE pr_insertar_novedades(@novedad
T_NOVEDAD,@proceso integer) 
BEGIN 
    declare @legajo 	 T_LEGAJO;
    declare @planilla 	 T_PLANILLA;
    declare @cantidad 	 T_CANTIDAD;
    declare @base 	 	 T_GUARANIES;
    declare @factor 	 double;
    declare err_notfound 	 exception for sqlstate
value '02000';
    declare c_cursor 	 dynamic scroll cursor for 
			 select legajo,planilla,cantidad,
			        base,factor 
    			   from novedades_modelos 
			  where novedad = @novedad;
    open c_cursor;
    CustomerLoop: 
	loop fetch next c_cursor 
   	    into
@legajo,@planilla,@cantidad,@base,@factor;
	    if sqlstate = err_notfound then 
		leave CustomerLoop
	    end if;
	    if not exists(select 1 from novedades_proceso 
	        		 where legajo = @legajo 
		             and novedad = @novedad 
			   and planilla = @planilla 
			   and numero_proceso = @proceso) then 
		insert into novedades_proceso (
legajo,novedad,planilla,cantidad,base,
			 		factor,numero_proceso) 
		   
values(@legajo,@novedad,@planilla,@cantidad,@base,@factor,@proceso)
	    end if
  end loop CustomerLoop;
  close c_cursor;
END;



_________________________________________________________
Do You Yahoo!?
Información de Estados Unidos y América Latina, en Yahoo! Noticias.
Visítanos en http://noticias.espanol.yahoo.com