Buenas tardes. Arturo no entendí muy bien tu redacción, pero veo que tratas de consultar varias tablas para buscar un mismo valor y aparentemente quieres que regrese dichos valores. Te dejo un ejemplo de la función para que puedas observar como sería:
CREATE TABLE xcm_menus_intercambiar1 ( id_primary_key integer PRIMARY KEY, id_menu integer, menu_padre integer, nom_menu varchar, desc_menu varchar, orden_db integer, nombre_tabla varchar DEFAULT 'xcm_menus_intercambiar1' ); CREATE TABLE xcm_menus_intercambiar2 ( id_primary_key integer PRIMARY KEY, id_menu integer, menu_padre integer, nom_menu varchar, desc_menu varchar, orden_db integer, nombre_tabla varchar DEFAULT 'xcm_menus_intercambiar2' ); INSERT INTO xcm_menus_intercambiar1 VALUES(1,2,3,'Menú Principal','Principal Nodo',4); INSERT INTO xcm_menus_intercambiar2 VALUES(1,3,4,'Menú Principal 2','Principal Nodo 2',5); CREATE OR REPLACE FUNCTION Consulta(ValorLlave integer) RETURNS SETOF RECORD AS $$ DECLARE Tabla RECORD; Valores RECORD; BEGIN FOR Tabla IN (SELECT LOWER(schemaname || '.' || tablename) AS nombre FROM pg_tables WHERE schemaname='public' AND UPPER(tablename) LIKE 'XCM%') LOOP FOR Valores IN EXECUTE 'SELECT * FROM ' || Tabla.nombre || ' WHERE id_primary_key=' || ValorLlave LOOP RETURN NEXT Valores; END LOOP; --Obtiene las filas resultantes END LOOP; --Obtiene los nombres de las tablas a consultar END; $$ LANGUAGE PLPGSQL; SELECT * FROM Consulta(1::integer) AS (id_primary_key integer, id_menu integer, menu_padre integer, nom_menu varchar, desc_menu varchar, orden_db integer, nombre_tabla varchar); Espero te sirva. Saludos. De: arturo chavarro <arturochava...@gmail.com> Para: pgsql-es-ayuda@postgresql.org Fecha: 13/04/2010 04:36 p.m. Asunto: [pgsql-es-ayuda] tomando campo dinamicosen una funcion Buenas tardes, Mi caso es el siguiente es toy estandarizando una funcion para k me retorne variables conforme a los datos de ingreso, por ejemplo tengo 10 tablas con una estructura igual y requiero por medio de esta function. lo k estoy haciendo es con un execute guardar los datos en un record, pero el problema k tengo es k no tengo respuesta del rec aplicandole la otra variable de ingreso rec.xxxx donde xxx para este caso es v_nom_padre una variable k conosco y esta en la tabla... para ser mas claro dejo elcontenido: DECLARE v_nom_shema ALIAS FOR $1; v_nom_table ALIAS FOR $2; v_nom_id ALIAS FOR $3; v_nom_padre ALIAS FOR $4; v_id_primary_key ALIAS FOR $5; v_direccion ALIAS FOR $6; rec record; v_campo_padre character varying; BEGIN for rec in EXECUTE 'SELECT * FROM '||v_nom_shema||'.'||v_nom_table||' WHERE id_primary_key = '||v_id_primary_key||'' loop v_campo_padre:= rec.v_nom_padre; end loop; return v_campo_padre; END ; tabla id_primary_key, id_menu, menu_padre, nom_menu, desc_menu, orden_db consumo select esquemita.xcm_menus_intercambiar('esquemita', 'tabla_menus','id_menu','menu_padre', 419, 'arriba') de antemano muchas gracias y si encuentro una solucion antes les estaré informando ----------------------------------------- La información transmitida mediante el presente correo es para la(s) persona(s) cuya dirección aparece al calce, la información contenida es estrictamente confidencial y para lectura exclusiva de la (s) persona (s) mencionada(s) por lo que esta prohida la reproducción, distribución o copia del presente. Si usted ha recibido este correo por error, favor de contactar con el remitente y eliminarlo de todas las charolas de su correo. The information transmitted by this e-mail is intended only for the person or entity to which it is addressed and may contain confidential and/or privileged material. If the reader of this message is not the intended recipient, you are hereby notified that you have received this message by error and that any review, dissemination, distribution or copying of this message including any attachments is strictly prohibited. If you received this by error, please contact the sender and delete the information from any computer.