Crie primeiro uma package, que vc vai usar para armazenar seu

"tipo" cursor:

 

CREATE OR REPLACE PACKAGE pck1 IS
  TYPE t_cursor IS REF CURSOR;
END pck1;



 

Depois, a function ficaria assim:

 

 

CREATE OR REPLACE FUNCTION calc_values RETURN pck1.t_cursor IS
RESULT pck_0000_geral.t_cursor; a NUMBER; b NUMBER; CURSOR ref1 IS
SELECT 2 FROM dual ORDER BY 1 ASC;

BEGIN

OPEN ref1; a := 0; b := 1;

LOOP FETCH ref1 INTO a; EXIT WHEN ref1%NOTFOUND; a := a + a; b := b + 1;
END LOOP;

OPEN RESULT FOR SELECT 4, 5 FROM dual;

RETURN RESULT;
END;



 

 

Abraço!

 

Milton Bastos Henriquis Junior

Oracle Database Administrator
Equipe de Tecnologia

[EMAIL PROTECTED]
Smartn ® IT Solutions
Rua Candido de Abreu, 651 - 16º andar
Centro Cívico - Curitiba
CEP 80.530-907.

Tel: ++ 55 41 3313-8613

Fax: ++ 55 41 3313-8620

www.smartn.com.br

 

________________________________

De: oracle_br@yahoogrupos.com.br [mailto:[EMAIL PROTECTED] Em nome de Digao
Enviada em: quinta-feira, 4 de janeiro de 2007 12:06
Para: oracle_br@yahoogrupos.com.br
Assunto: [Smartn ANTISPAM- Possible DNSBL] - [oracle_br] Funcao retornando 
cursor - Sending mail server found on xbl.spamhaus.org

 

Olá pessoal, tudo bem?

Trabalho há 5 anos com o postgreSQL, mas com o Oracle sou novo e estou 
apanhando um pouco. Preciso de uma ajuda. 

Preciso de 3 valores (2 do tipo int e 1 do tipo varchar), que serão calculados 
atraves de alguns selects e algumas regras. Para isso pensei em fazer uma 
função que me retornasse um CURSOR. 
Isso era o que iria fazer se fosse no PostgreSQL. Porém não estou conseguindo 
retornar um cursor no Oracle. A ideia que estou usando é:

create or replace function calc_values return cursor is
a int;
b int;
CURSOR ref1 IS SELECT cod from teste ORDER BY cod asc;
CURSOR ref2 IS SELECT a,b from dual; 
BEGIN

OPEN ref1;
a := 0; 
b := 1;

LOOP
FETCH ref1 INTO a; 
EXIT WHEN ref1%NOTFOUND; 
a := a +a;
b := b+1;
END LOOP;

OPEN ref2; 
RETURN ref2; 
END;

Essa funcao está apresentada apenas a idéia.. o cálculo é bem mais complexo, 
mas não é o problema. O problema é que essa funcao não roda. 
Quem irá chamar essa funcao é uma aplicação delphi. 

Alguem tem alguma idéia? Estou fazendo algo errado?

Obrigado a todos...

Abraços


---------------------------------
Yahoo! Acesso Grátis - Internet rápida e grátis. Instale o discador agora! 

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

 


________________________________________________________________________________________________________________________
ADVERTENCIA: Esta mensagem (incluindo quaisquer anexos) e confidencial e de uso 
restrito. Se voce recebeu esta 
mensagem por engano, por favor notifique ao emitente por meio do retorno do 
e-mail e delete (remova) esta 
mensagem de seu sistema. Qualquer uso nao autorizado ou distribuicao desta 
mensagem em sua totalidade ou em parte 
e estritamente proibido. Por favor, lembre-se de que e-mails sao susceptiveis a 
alteracoes. Smartn (incluindo 
outras empresas participantes direta ou indiretamente) nao devem ser 
responsabilizados pelo uso improprio ou pela 
transmissao incompleta da informacao contida neste comunicado, nem por nenhum 
atraso em seu recebimento ou dano ao 
seu sistema. Smartn (incluindo outras empresas participantes direta ou 
indiretamente) nao garante que a integridade 
deste comunicado foi mantida nem que este comunicado esta livre de virus, 
interceptacao ou interferencia. 

DISCLAIMER: This message (including any attachments) is confidential and may be 
privileged. If you have received it 
by mistake please notify the sender by return e-mail and delete this message 
from your system. Any unauthorized use 
or dissemination of this message in whole or in part is strictly prohibited. 
Please note that e-mails are susceptible 
to change. Smartn (including its group companies) shall not be liable for the 
improper or incomplete transmission of 
the information contained in this communication nor for any delay in its 
receipt or damage to your system. Smartn 
(or its group companies)does not guarantee that the integrity of this 
communication has been maintained nor that this 
communication is free of viruses, interception or interference. 

NEGACIÓN: Este mensaje (incluyendo cualquieres accesorios) es confidencial y 
puede ser privilegiado. Si usted lo ha
recibido por error por favor notifique el remitente por el E-mail de vuelta y 
suprima este mensaje de su sistema. Cualquier 
uso o difusión desautorizado de este mensaje en entero o en parte se prohíbe 
terminantemente. Observe por favor que 
los E-mails son susceptibles al cambio. Smartn (incluyendo sus compañías  del 
grupo) no será obligado para la transmisión 
incorrecta o incompleta de la información contenida en esta comunicación ni 
para cualquier no retrasa en su recibo o daño 
a su sistema. Smartn (o sus compañías del grupo) no garantiza que la integridad 
de esta comunicación se ha mantenido ni 
que esta comunicación está libre de virus, de la interceptación o de 
interferencia.


________________________________________________________________________________________________________________________



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

Responder a