Ver Mensaje Individual
  #2 (permalink)  
Antiguo 07/12/2007, 08:18
chcma
 
Fecha de Ingreso: junio-2003
Ubicación: Asturias
Mensajes: 2.429
Antigüedad: 21 años, 5 meses
Puntos: 7
Re: Que tengo mal en este Procedimiento almacenado ? 8.2

Tambien lo intenté asi:
Código:
CREATE OR REPLACE FUNCTION PDAMEUSUARIO2(IN pdni bpchar, IN pclave bpchar) RETURNS SETOF record AS
$BODY$
DECLARE reg_fila record;
BEGIN
	FOR reg_fila IN SELECT cod_usuario, dni, nombre, apellido_1, apellido_2, fecha_nacimiento, 
			        tusuarios.cod_provincia, tprovincias.provincia, tusuarios.cod_pais, 
			        tpaises.pais, ciudad, codigo_postal, email, clave, telefono_movil, 
				descripcion, cod_buscar, notificarme, ver_todos
			  
				FROM tusuarios
				INNER JOIN tpaises 
					ON tpaises.cod_pais = tusuarios.cod_pais
				INNER JOIN tprovincias
					ON tprovincias.cod_provincia = tusuarios.cod_provincia

				WHERE DNI=pdni
				AND   CLAVE = pclave
	LOOP
		return next reg_fila;
	END LOOP;
END;
$BODY$
LANGUAGE 'plpgsql' VOLATILE;

El error al llamarla es:
SELECT * FROM PDAMEUSUARIO2('71641951-X', 'micarlito');

ERROR: a column definition list is required for functions returning "record"
Estado SQL:42601



Vale, en este caso entiendo que tendría que poner algo como:
SELECT * FROM PDAMEUSUARIO2('71641951-X', 'micarlito') as tabla(nombrecampo tipovalorcampo, nombrecampo2 tipovalorcampo2, etc...);

Pero... ¿No hay ninguna manera de poder realizar un select * from miPROCEDIMIENTO(parametros) y que me devuelva ya los campos que quiera, sean o no sean de una sola tabla?, vamos que si un procedimiento me devuelve 30 campos, no tenga que poner la definiciación de cada uno de ellos cada vez que queira llamarlo.
__________________
Charlie.

Última edición por chcma; 07/12/2007 a las 10:11 Razón: Concretar mas el problema.