Eu estou em casa agora... não da pra testar... mas tente fazer assim:

create or replace function teste1()
return int
is
  CURSOR ref1 (str  varchar2(1000))  IS
    SELECT cod from teste WHERE nome in (str);

BEGIN
  str := '''rodrigo''' || ',' || '''teste''';

  FOR rec1 (str) IN ref1 LOOP
    DBMS_OUTPUT.PUT_LINE(rec1.cod);
  END LOOP;

  return 1;
END;


Dependendo do que você quer fazer, da pra você utilizar o EXECUTE IMMEDIATE.
Amanhã eu dou uma olhada no trabalho e te dou um toque.


On 1/15/07, Digao <[EMAIL PROTECTED]> wrote:
>
>   Olá pessoal, tudo bem? Estou fazendo uma função em plsql, e estou com
> problemas com um cusor.
> Tenho um cursor que faz um select filtrando com o IN. Porém, os valores do
> IN, eu monto durante a plsql:
>
> create or replace function teste1() return int is
> valor int;
> str varchar2(1000);
> CURSOR ref1 IS SELECT cod from teste WHERE nome in (str);
> BEGIN
> str := '''rodrigo''' || ',' || '''teste''';
> OPEN ref1;
>
> LOOP
> FETCH ref1 INTO valor;
> EXIT WHEN ref1%NOTFOUND;
> DBMS_OUTPUT.PUT_LINE(valor);
> END LOOP;
>
> CLOSE ref1;
> return 1;
> END;
>
> Para montar a lista do IN, eu faço vários cálculos.
>
> Qual o erro? A função executa mas não printa os valores. Se eu colocar
> apenas 1 valor na string str, funciona... mas quando concateno a string, não
> funciona.
> Já tentei concatenar sem aspas, com 1 aspa, com 3 aspas e nada... Já
> deixei a string no formato: 'rodrigo','teste' e também nada...
>
> Alguém tem alguma idéia?
>
> Obrigado a todos
>
> ------------
> Rodrigo (Digao)
>
>
> ---------------------------------
> Yahoo! Search
> Música para ver e ouvir: You're Beautiful, do James Blunt
>
> [As partes desta mensagem que não continham texto foram removidas]
>
>  
>


[As partes desta mensagem que não continham texto foram removidas]

Responder a