Re: Execute y Update

From: José Ruiz aguilera <farfaconda(at)gmail(dot)com>
To: Perla <perla_bsas(at)yahoo(dot)com(dot)ar>
Cc: pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: Execute y Update
Date: 2010-10-13 15:59:25
Message-ID: AANLkTimtM9008B+BZOVtK4oUS+2L70+eWaDm_9EaY6KF@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

El problema lo tienes porque plpgsql intenta encontrar los campos
'cxm', 'cantidad' y 'monto' entre las variables y parametros pasados a
la funcion para sustituirlos dentro de la cadena. Al no encontrarlos
te devuelve el error.

Para hacer lo que quieres en lugar de utilizar el USING, puedes hacer
una concatenación de la cadena a ejecutar:

CREATE OR REPLACE FUNCTION crear_cxm() RETURNS VOID AS
$$
BEGIN
EXECUTE 'update datos set ' || 'cxm' ||'='|| 'cantidad' ||'*'||
'monto';
END;
$$ LANGUAGE plpgsql;

Espero haberte ayudado.

El 13 de octubre de 2010 17:22, Perla <perla_bsas(at)yahoo(dot)com(dot)ar> escribió:

> Buenas!
> ahora tengo un problema con la sentencia EXECUTE para realizar un UPDATE en
> una función, la función es la siguiente:
>
> *CREATE OR REPLACE FUNCTION crear_cxm() RETURNS VOID AS
> $$
> BEGIN
> EXECUTE 'update datos set $1=$2*$3' USING cxm,cantidad,monto;
> END;
> $$ LANGUAGE plpgsql;*
>
> y el error:
> *ERROR: no existe la columna «cxm»
> LÍNEA 1: SELECT cxm
> ^
> CONSULTA: SELECT cxm
> CONTEXTO: PL/pgSQL function "crear_campos_cxm" line 2 at sentencia EXECUTE
> *
>
> El campo cxm existe en la tabla y no se porque da el error. La idea es
> generar una función que permita crear un campo como multiplicación de otros
> dos campos y que se pueda cambiar el nombre de los campos que se
> multiplican, hay otra forma de hacerlo?
> gracias,
>
>
>
>

--
José Ruiz Aguilera

In response to

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Jose Prince 2010-10-13 15:59:57 Re: COPY TO
Previous Message Perla 2010-10-13 15:22:04 Execute y Update