Ayuda a Corregir funcion en postgres

From: Marcelino Guerrero <mguerreroh(at)gmail(dot)com>
To: pgsql-es-ayuda(at)postgresql(dot)org
Subject: Ayuda a Corregir funcion en postgres
Date: 2006-11-22 14:52:59
Message-ID: 4564644B.7010103@gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Amigos re-envio mi mensaje, mucho agraadecere algun comentario sobre esto, si es posible hacerlo oo quizas deseo hacer
algo que es imposible, ya sea por mi logica o por que Postgres no lo permite.

Grcs+Slds

Marcelino Guerrero escribió:
> Amigos,
>
> Hace unos días envie un mensaje para hacer una especie de Log, el
> procedimiento me funciono muy bien, pero hay algo que no considere y es
> que si necesito eliminar varios registros, el procedimiento anterior me
> daqba error, solo podia eliminar 1 registro.
>
> Con la siguiente función pretendo corregir esto, pero tengo el siguiente
> problema, en valor_campo pretendo colocar el contenido de un determinado
> campo, por ejemplo en el actual codigo tengo "valor_campo =
> xtabla.n_cliente", el valor de valor_campo va a ser el nombre del
> cliente, pero quisiera que esto vaya cambiando conforme a los campos que
> puedo tener, por Ejemplo codigo, n_cliente, ruc, telefono, etc., estos
> campos estan en mviews.
>
> Hasta el momento no he podido hacerlo, agradecere me pudieran ayudar ya
> que esto es muy importante.
>
> Slds
>
> Procedimiento:
>
> CREATE OR REPLACE FUNCTION log_eliminar_3("varchar", "varchar",
> "varchar", "varchar")
> RETURNS void AS
> $BODY$
>
> DECLARE
> -- $1 es tabla a la que se le hara el log
> -- $2 campo de ID o el de la condicional
> -- $3 valor del campo que debera de igualarse en la condicional
> -- $4 usuario que elimina el registro
> mviews RECORD;
> xtabla RECORD;
> xcont int2;
> xx21 alias for $1;
> valor_campo varchar;
> BEGIN
> xcont =0;
>
> FOR xtabla IN execute 'select * from ' || xx21 || ' where ' || $2
> || ' = ' || quote_literal($3) LOOP
> xcont = xcont + 1;
>
> FOR mviews IN select atributo.attname as campo from pg_attribute
> atributo, pg_class clase, pg_tables tablas
> where atributo.attrelid=clase.relfilenode and
> atributo.attstattarget = '-1' and
> clase.relname=tablas.tablename and tablas.tablename = $1
> order by atributo.attname LOOP
> valor_campo = xtabla.ruc;
> execute 'insert into eliminados.log_' || $1 || '
> (seq,campo,contenido,usuario) values(' || xcont || ',' ||
> quote_literal(mviews.campo) || ', ' || valor_campo
> || ', '|| quote_literal($4) || ')';
> END LOOP;
> END LOOP;
> RETURN;
> END$BODY$
> LANGUAGE 'plpgsql' VOLATILE;
>
>
> ---------------------------(fin del mensaje)---------------------------
> TIP 2: puedes desuscribirte de todas las listas simultáneamente
> (envíe "unregister TuDirecciónDeCorreo" a majordomo(at)postgresql(dot)org)
>

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message arturo garcia 2006-11-22 15:57:34 RE: Migracion de Sybase a Postgres
Previous Message Alvaro Herrera 2006-11-22 14:17:11 Re: Tunnig de postgres no toma mas memoria