Hola Jaime , lista

Jaime, no se si entendi tu respuesta
el escenario es muy simple

declare sql varchar = null ;
...

sql = 'perform   update_or_insert_nacionalidades( ' ;
sql = sql || quote_literal( v_cod2 )  || ' ::text  ,' ;
sql = sql || quote_literal(v_nombre )  || ' ::text  );' ;

/*  * sql  CONTIENE ESTO:  perform   update_or_insert_nacionalidades( '22'
::text  ,'Colombiana' ::text  ); *  */

perform dblink_exec('testconnect'::text ,  sql  ::text   ); --> FALLA... (
VER ERROR)
 perform  dblink_disconnect('testconnect'::text);



ESTE ES EL *ERROR*:

NOTICE:   'perform   update_or_insert_nacionalidades( '22' ::text
 ,'Colombiana' ::text  );'


ERROR:  syntax error at or near "perform"
CONTEXT:  Error occurred on dblink connection named "unnamed": could not
execute command.
SQL statement "SELECT dblink_exec('testconnect'::text ,  sql  ::text   )"
PL/pgSQL function "tr_datos_dominio" line 113 at PERFORM


ya probe con select. en lugar de perform
tambien probe que al invocarlo use select.

perform 'select update_or_insert_nacionalidades( '22' ::text  ,'Colombiana'
::text )' ;

Cualquier idea sera agradecida.
saludos

jmdc

2012/11/15 Jaime Casanova <[email protected]>

> 2012/11/14 Juan <[email protected]>
> >
> > Lista , Anthony
> > ))
> >  si yo pregunto por lo que no sea select  ,como llamar a una funcion,
>
> lo que pasa es que en postgresql se llama a una funcion a traves de SELECT.
> PERFORM es intercambiable con SELECT pero: 1) descarta resultados y 2)
> solo es reconocido dentro de codigo plpgsql (osea dentro de funciones)
>
> podrias escribir una funcion y adentro ejecutar: PERFORM * FROM tabla
>
> > tambien una cosa de la que se queja el dblink es que si pongo un select
> > me dice algo como que no puede recibir resultado... o algo asi, ahora
> estoy
> > lejos de esa pc.
>
> eso es porque debes indicarle que valores regresa y que tipos de datos son
>
> SELECT * FROM dblink() as foo(arg1 tipo1, arg2 tipo2)
>
> > ademas por eso y porque busque en el api, no encontre que dblink_exec
>  devuelva algo, sino es
> > el error basado en un parametro del dblink_exec( stringToExecute,
> parametroBooleanQuediceElErrorOno)
> > o algo asi ahora no tengo la pc a mano.
> >
>
> dblink_exec retorna el estado en formato texto. parece que es mas para
> cosas que no retornan valores como INSERT, UPDATE, DELETE.
> para selects que retornan un valor debes usar dblink(), parece legal
> sin embargo usar dblink_exec() con una llamada a una funcion que
> retorne void, algo como:
>
> SELECT dblink_exec('SELECT funcion(1, 1);');
>
> --
> Jaime Casanova         www.2ndQuadrant.com
> Professional PostgreSQL: Soporte 24x7 y capacitación
> Phone: +593 4 5107566         Cell: +593 987171157
>

Responder a