Juan, me parece que estas usando mal el fetch.

.....
DECLARE
valor      text;
cn  cursor for SELECT id_nacionalidad from nacionalidades where
id_nacionalidad  = cod   ;
BEGIN
OPEN cn;
FETCH cn INTO valor;
IF NOT FOUND THEN
.....

Saludos,
Nico.

El 14 de noviembre de 2012 15:42, Juan <smalltalker.marc...@gmail.com>escribió:

> Gente
>
> Nicolas, le puse el fetch pero no compila!!!
> aca esta la funcion con el comentario donde no compila
>
> CREATE OR REPLACE FUNCTION update_or_insert_nacionalidades(cod text,
> nombre text)
>   RETURNS void AS
> $BODY$
>
> declare  cn  cursor for SELECT * from  nacionalidades where
> id_nacionalidad  = cod   ;
> BEGIN
>
>
>      open   cn ;
>
>      FETCH  count in    cn ;  /* ESTO NO COMPILA  TIRA ERROR->  ERROR:
>  syntax error at or near ";"LINE 11:   FETCH  count in    c_n ; */
>
>  if not FOUND  then
> /* no esta en  nacionalidades */
> RAISE NOTICE 'update_or_insert_nacionalidades --> INSERT  ';
>  insert into  nacionalidades( id_nacionalidad ,  nacionalidad ) values (
> cod , nombre ) ;
>  else
> RAISE NOTICE 'update_or_insert_nacionalidades --> UPDATE ';
>   update  nacionalidades set nacionalidad = nombre where id_nacionalidad
> = cod ;
> end if ;
>      close c_nacionalidad;
>     RETURN  ;
> END;
> $BODY$
>   LANGUAGE plpgsql VOLATILE
>   COST 100;
> ALTER FUNCTION update_or_insert_nacionalidades(text, text)
>   OWNER TO postgres;
>
>
> cualquier idea sera agradecida.
> salu2
> jmdc
>
> 2012/11/14 Nicolas Dominguez Florit <nicolas...@gmail.com>
>
>> Puede ser que lo que te falte sea hacer un FETCH luego del Open?
>> Saludos,
>> Nico.
>>
>>
>> El 14 de noviembre de 2012 13:58, Juan 
>> <smalltalker.marc...@gmail.com>escribió:
>>
>> Gente
>>>
>>>
>>>  Tengo un problema con un cursor, y tambien una duda
>>> en el sig porcion de codigo , cod y nombre son text y son los parametros
>>> de una funcion
>>>
>>> ..
>>> declare  c_nacionalidad refcursor ;
>>> begin
>>>
>>>    OPEN c_nacionalidad FOR execute 'SELECT * from nacionalidades where
>>> id_nacionalidad  = ' || quote_literal(cod  ) ;
>>>  if not FOUND  then
>>> /* no esta en nacionalidades */
>>> RAISE NOTICE 'update_or_insert_nacionalidades --> INSERT  ';
>>>  insert into nacionalidades( id_nacionalidad ,  nacionalidad ) values (
>>> cod , nombre ) ;
>>>  else
>>> RAISE NOTICE 'update_or_insert_nacionalidades --> UPDATE ';
>>>   update  nacionalidades set nacionalidad = nombre where
>>> id_nacionalidad = cod ;
>>> end if ;
>>> end ;
>>>
>>>
>>> el problema es con el not FOUND, no se si entendi mal, pero me da falso,
>>> pero tengo una row con esa clave,
>>> preg: luego de un open del cursor se afecta a la variable FOUND ????
>>> donde encuentro esa documentacion, en verdad googleando no la encontre,
>>> agradecere cualquier info ,
>>> salu2
>>> jmdc
>>>
>>
>>
>

Responder a