Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General »

Problemas con PostgreSQL

Estas en el tema de Problemas con PostgreSQL en el foro de Bases de Datos General en Foros del Web. Hola estoy trabajando sobre el servidor de base de datos PostgreSQL, es muy bueno pero no encuentro muchos manuales de como crear funciones en PLPGSQL ...
  #1 (permalink)  
Antiguo 11/05/2006, 16:33
 
Fecha de Ingreso: mayo-2006
Mensajes: 16
Antigüedad: 17 años, 11 meses
Puntos: 0
Exclamación Problemas con PostgreSQL

Hola estoy trabajando sobre el servidor de base de datos PostgreSQL, es muy bueno pero no encuentro muchos manuales de como crear funciones en PLPGSQL
ahora bien tengo la siguiente funcion en Postgres:
CREATE OR REPLACE FUNCTION PROBAR () RETURNS SETOF RECORD AS
$$
DECLARE
REC RECORD;
REC_B RECORD;
BEGIN
FOR REC IN select * from impuestos LOOP
RETURN NEXT REC;
END LOOP;
RETURN;
END;
$$
LANGUAGE 'PLPGSQL' VOLATILE

y me da el siguiente error cuando quiero ejecutarlo:

ERROR: set-valued function called in context that cannot accept a set
CONTEXT: PL/pgSQL function "probar" line 6 at return next

si alguien podria ayudarme.....
  #2 (permalink)  
Antiguo 11/05/2006, 17:26
Avatar de xknown  
Fecha de Ingreso: diciembre-2004
Ubicación: Cusco - Perú
Mensajes: 2.248
Antigüedad: 19 años, 3 meses
Puntos: 7
Por lo que veo en tu función no hay ningún error, como estás llamando a tu función?

Saludos
__________________
Alex Concha
Buayacorp - Programación y Diseño
  #3 (permalink)  
Antiguo 11/05/2006, 18:27
 
Fecha de Ingreso: mayo-2006
Mensajes: 16
Antigüedad: 17 años, 11 meses
Puntos: 0
Ejecucion del Codigo

Select prueba()
  #4 (permalink)  
Antiguo 11/05/2006, 18:41
Avatar de xknown  
Fecha de Ingreso: diciembre-2004
Ubicación: Cusco - Perú
Mensajes: 2.248
Antigüedad: 19 años, 3 meses
Puntos: 7
Tu función retorna un conjunto de datos, por lo que la llamada a la misma debería ser:

select * from prueba() as foo(campo1 tipo, campo2 tipo, ....);

A lo mejor quisieras cambiar tu función:
Código:
CREATE OR REPLACE FUNCTION PROBAR () RETURNS SETOF impuestos AS
$$
DECLARE
REC impuestos%ROWTYPE;

BEGIN
FOR REC IN select * from impuestos LOOP
RETURN NEXT REC;
END LOOP;
RETURN;
END;
$$
LANGUAGE 'PLPGSQL';
para hacer llamadas del tipo:
select * from probar();

Saludos
__________________
Alex Concha
Buayacorp - Programación y Diseño

Última edición por xknown; 11/05/2006 a las 18:47
  #5 (permalink)  
Antiguo 12/05/2006, 07:04
 
Fecha de Ingreso: mayo-2006
Mensajes: 16
Antigüedad: 17 años, 11 meses
Puntos: 0
Muchas gracias Alex, solucionaste mi problema
Y si puedes recomendarme un buen tutorial te lo agradeceria mucho más

Última edición por carazas; 15/05/2006 a las 08:32
  #6 (permalink)  
Antiguo 12/05/2006, 14:19
Avatar de xknown  
Fecha de Ingreso: diciembre-2004
Ubicación: Cusco - Perú
Mensajes: 2.248
Antigüedad: 19 años, 3 meses
Puntos: 7
http://www.postgresql.org/docs/XX/in...ive/index.html, donde XX es la versión que usas, te recomiendo también que te suscribas a esta lista:
http://archives.postgresql.org/pgsql-es-ayuda/

Saludos
__________________
Alex Concha
Buayacorp - Programación y Diseño
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 19:07.