Re: tomando campo dinamicosen una funcion

From: mvillagomez(at)elektra(dot)com(dot)mx
To: arturo chavarro <arturochavarro(at)gmail(dot)com>
Cc: pgsql-es-ayuda(at)postgresql(dot)org, pgsql-es-ayuda-owner(at)postgresql(dot)org
Subject: Re: tomando campo dinamicosen una funcion
Date: 2010-04-13 23:28:57
Message-ID: OFA42EA781.580EE38B-ON86257704.007E2677-86257704.0080D78F@gruposalinas.com.mx
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

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 <arturochavarro(at)gmail(dot)com>
Para:
pgsql-es-ayuda(at)postgresql(dot)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.

In response to

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Alvaro Herrera 2010-04-14 01:22:14 Re: [INSTALACION DESDE FUENTES] Fallo de make check durante la compilacion de 9.0alpha4 en Ubuntu 9.10
Previous Message Ing. Marcos Ortiz Valmaseda 2010-04-13 22:12:17 [INSTALACION DESDE FUENTES] Fallo de make check durante la compilacion de 9.0alpha4 en Ubuntu 9.10