Existe un tipo de dato Query o forma de castear un text a una sentencia SQL?

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.

Responses

Browse pgsql-es-ayuda by date

  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