From: | Andres Rodriguez <anrocoubuntu(at)gmail(dot)com> |
---|---|
To: | pgsql-es-ayuda(at)postgresql(dot)org |
Subject: | Existe un tipo de dato Query o forma de castear un text a una sentencia SQL? |
Date: | 2012-04-16 18:07:37 |
Message-ID: | CANECpPX_y-isxM11BMq8gn-DXGOnS+Ld97LQzUnMYHT3+eHsaA@mail.gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-es-ayuda |
Cordial saludo listeros, tengo el siguiente caso:
Tabla1:
CREATE TABLE tabla1 (
campo1 bigint,
campo2 text,
campo3 text,
CONSTRAINT pk_ tabla1 PRIMARY KEY (campo1)
)
Tabla2:
CREATE TABLE tabla2 (
campo4 bigint,
campo5 text,
CONSTRAINT pk_ tabla2 PRIMARY KEY (campo4),
CONSTRAINT fk_ tabla1 FOREIGN KEY (campo4)
REFERENCES tabla1 (campo1) MATCH SIMPLE
ON UPDATE CASCADE ON DELETE CASCADE
)
Tabla3:
CREATE TABLE tabla3 (
campo6 bigint,
campo7 text,
CONSTRAINT pk_ tabla3 PRIMARY KEY (campo6),
CONSTRAINT fk_ tabla1 FOREIGN KEY (campo6)
REFERENCES tabla1 (campo1) MATCH SIMPLE
ON UPDATE CASCADE ON DELETE CASCADE
)
En mi aplicación construyo la consulta que se necesita de acuerdo a los
parámetros de búsqueda requeridos:
SELECT
t1.campo1, t1.campo2, t1.campo3, t2.campo5, t3.campo7
FROM
tabla1 AS t1
LEFT JOIN tabla2 AS t2 ON t1.campo1 = t2.campo4
LEFT JOIN tabla3 AS t3 ON t1.campo1 = t3.campo6
WHERE condiciones
Donde “condiciones” varia, generando diferentes combinaciones, por ejemplo:
condiciones: “campo2=valor”
condiciones: “campo3=valor AND campo5=valor”
condiciones: “campo2=valor AND campo7=valor AND campo5=valor”
Pero de acuerdo a ciertos valores de algunos campos necesito agregar otros
registros al resultado de la consulta generada.
Mi pensado es hacer un procedimiento almacenado donde se crea una tabla
temporal con el resultado de la consulta, luego recorrer esa tabla temporal
y validar las condiciones que determinan si se debe o no agregar un nuevo
registro a la tabla temporal.
Es posible enviar la consulta que se ha creado en la aplicación al
procedimiento almacenado?. Existe algún tipo de dato o forma de convertir
un texto a una sentencia SQL? Algo como esto.
CREATE OR REPLACE FUNCTION funcion(text) RETURNS SETOF RECORD AS
$BODY$
DECLARE
registro record;
-- “consulta” seria un query que se construye en la aplicación.
consulta ALIAS FOR $1;
BEGIN
CREATE TEMPORARY TABLE resultado_temp (
campo1 bigint,
campo2 text,
campo3 text,
campo5 text,
campo7 text,
)ON COMMIT DROP;
-- se inserta los datos de “consulta” en la tabla temporal.
INSERT INTO resultado_temp consulta;
FOR registro IN SELECT * FROM resultado_temp LOOP
RETURN NEXT registro;
END LOOP;
RETURN;
END;
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;
ALTER FUNCTION funcion(text) OWNER TO postgres;
Gracias por los comentarios.
From | Date | Subject | |
---|---|---|---|
Next Message | Gilberto Castillo Martínez | 2012-04-16 18:45:06 | Re: Existe un tipo de dato Query o forma de castear un text a una sentencia SQL? |
Previous Message | Edwin Quijada | 2012-04-16 13:24:36 | RE: MERGE entre Base de Datos |