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.