Skip site navigation (1) Skip section navigation (2)

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 (view raw or flat)
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

pgsql-es-ayuda by date

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

Privacy Policy | About PostgreSQL
Copyright © 1996-2014 The PostgreSQL Global Development Group