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 <alvhe...@alvh.no-ip.org> - Enviado a la lista de correo pgsql-es-ayuda (pgsql-es-ayuda@postgresql.org) Para cambiar tu suscripci�n: http://www.postgresql.org/mailpref/pgsql-es-ayuda