Re: Problema para construir una funcion dinamicamente

From: Alvaro Herrera <alvherre(at)alvh(dot)no-ip(dot)org>
To: Leonel Fuentes Marrero <lfmarrero(at)uci(dot)cu>
Cc: Ayuda <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Re: Problema para construir una funcion dinamicamente
Date: 2012-02-08 14:05:40
Message-ID: 1328709679-sup-2663@alvh.no-ip.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda


Excerpts from Leonel Fuentes Marrero's message of mié feb 08 10:25:33 -0300 2012:
> Hola Familia:
>
> Quiero construir una función dinámicamente y me da error.

> -------------------------------------------------------------
> CREATE OR REPLACE FUNCTION loca(_var text)
> RETURNS void AS
> $BODY$
> declare
> nuevas record;
> inicio record;
> nomb varchar;
> script text;
> begin
> script:= '
> SELECT * from pg_catalog.pg_class pgc,pg_catalog.pg_namespace pgn where pgc.relname = ' || '''loca1''' || ' and pgc.relnamespace=pgn.oid and pgn.nspname=' || '''' || $1::text || '''' || ';
> if not found then
> create table loca1 (id int);
> else
> insert into loca1 values (1);
> insert into loca1 values (2);
> insert into loca1 values (3);
> end if;
> ';
>
> execute script;
> end;
> $BODY$

Aquí no estás creando una función. Lo que estás haciendo es ejecutar
código dinámico con execute. Creo que tu problema es que estás tratando de
usar execute como si fuera una especie de "eval", que hipotéticamente
tomara un trozo de código y lo ejecutara como si fuera código plpgsql.
EXECUTE no hace eso; lo que hace es tomar un trozo de código y lo
ejecuta como si fuera SQL. No tengo claro cuál es el propósito de poner
ese "if" dentro del execute en vez de fuera, pero esto no puede
funcionar.

Quizás te sirva poner un DO ahí, o sea:

execute 'DO $$ select bla bla; if foo then bar; end if; $$'

A todo esto, otra cosa que no está bien en tu código es que estás usando
SELECT dentro de ese trozo de código, lo cual no funciona bien; usa
PERFORM.

--
Álvaro Herrera <alvherre(at)alvh(dot)no-ip(dot)org>

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Alvaro Herrera 2012-02-08 14:24:31 Re: Pregunta sobre catalogos
Previous Message Martin Li Causi 2012-02-08 14:03:35 Re: ayuda con oracle_fdw