Ver Mensaje Individual
  #3 (permalink)  
Antiguo 07/10/2009, 09:37
Avatar de jgabrielsinner10
jgabrielsinner10
 
Fecha de Ingreso: octubre-2008
Mensajes: 26
Antigüedad: 16 años, 2 meses
Puntos: 0
Respuesta: Problema con Store Procedure en PostgreSQL

Oye full gracias por explicarme eso.

Ahora tengo otro Error

Tengo esta tabla tbl_ciudades

Código:
CREATE TABLE sch_general.tbl_ciudades
(
  ciudades_id serial NOT NULL,
  ciudades_descripcion character varying(20) NOT NULL,
  estados_id integer NOT NULL,
  CONSTRAINT tbl_ciudades_pkey PRIMARY KEY (ciudades_id),
  CONSTRAINT tbl_ciudades_estados_id_fkey FOREIGN KEY (estados_id)
      REFERENCES sch_general.tbl_estados (estados_id) MATCH SIMPLE
      ON UPDATE NO ACTION ON DELETE NO ACTION
)
Ya creé el SP sin problemas.

Código:
CREATE OR REPLACE FUNCTION sch_general."doSelect"(tabla text)
  RETURNS SETOF record AS
$BODY$
DECLARE
	registro RECORD;
	sql TEXT;
BEGIN
	sql = 'SELECT * FROM ' || $1;
	FOR registro IN EXECUTE sql  LOOP
		RETURN NEXT registro;
	END LOOP;
	RETURN;
END;
$BODY$
  LANGUAGE 'plpgsql' VOLATILE
  COST 100
  ROWS 1000;
ALTER FUNCTION sch_general."doSelect"(text) OWNER TO postgres;
Ahora cuando llamo al SP de esta forma:

Código:
SELECT * FROM sch_general."doSelect"('sch_general.tbl_ciudades') AS tbl_ciudades(ciudades_id INTEGER, ciudades_descripcion text, estados_id numeric);
Me lanza este error:

RROR: wrong record type supplied in RETURN NEXT
CONTEXTO: PL/pgSQL function "doSelect" line 7 at RETURN NEXT

********** Error **********

ERROR: wrong record type supplied in RETURN NEXT
SQL state: 42804
Context: PL/pgSQL function "doSelect" line 7 at RETURN NEXT


Ah! Otra Cosa Brother.

Código:
	BEGIN
		IF ciudad_id == 0 THEN
			IF estado_id == 0 THEN
				-- Consulta General de Todos los Registros
				SELECT INTO ciudades * FROM sch_general.tbl_ciudades;
			ELSE
				-- Consulta por FK
				SELECT INTO ciudades * FROM sch_general.tbl_ciudades WHERE sch_general.tbl_ciudades.estados_id = estado_id;
			END IF;
		ELSE
			-- Consulta por PK
			SELECT INTO ciudades * FROM sch_general.tbl_ciudades WHERE sch_general.tbl_ciudades.ciudades_id = ciudad_id;
		END IF;
	END;
Me dá unos errores en las comparaciones... NO entiendo cómo hacer las comparaciones (IF) de datos en SP de Postgres.

Última edición por jgabrielsinner10; 07/10/2009 a las 10:15