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]