Ajuda em function

Dúvidas, dicas e truques de PL/SQL. Aqui também vão assuntos relacionados a pacotes, triggers, funções, Java-Stored Procedures, etc
Responder
bride
Rank: Analista Júnior
Rank: Analista Júnior
Mensagens: 98
Registrado em: Qua, 24 Set 2008 11:00 pm
Localização: Belo Horizonte - MG
Bride
OCA Oracle PL/SQL Developer Certified Associate

Perssoal preciso de uma ajuda nessa function aqui, ela esta preparada para o retorno de uma linha, mais como fazer para o retorno de mais de uma

Selecionar tudo

CREATE OR REPLACE FUNCTION GETUMAORIAPA( PIDCORDSVC    IN   VARCHAR2,
                                         PVLRNROSEQATV IN   VARCHAR2,
                                         PVLRNUMSEQSVC IN   VARCHAR2,
                                         PNROITMORDSVC IN   VARCHAR2)
RETURN VARCHAR2 As
PCODUMA NUMBER(10);

Begin 

        SELECT UMA.CODUMA INTO PCODUMA
          FROM WMS_MOVRSVESQEND RSV
               INNER JOIN WMS_MOVMTGVOL MTG ON MTG.IDCMOVRSVESQEND = RSV.IDCMOVRSVESQEND
               INNER JOIN WMS_RELMTGVOLORDSVC REL ON MTG.IDCMOVMTGVOL = REL.IDCMOVMTGVOL
               INNER JOIN WMS_RELMTGORDMOVESQ RELTMP ON RELTMP.IDCMTGVOLORDSVC = REL.IDCMTGVOLORDSVC
               INNER JOIN WMS_MOVESQUMA MOV ON MOV.IDCMOVESQUMA = RELTMP.IDCMOVESQUMA
               INNER JOIN WMS_CADUMA UMA ON UMA.IDCUMA = MOV.IDCUMA
        WHERE  REL.IDCORDSVC    = PIDCORDSVC
           AND REL.VLRNROSEQATV = PVLRNROSEQATV
           AND REL.VLRNUMSEQSVC = PVLRNUMSEQSVC
           AND REL.NROITMORDSVC = PNROITMORDSVC;
   
   RETURN PCODUMA;
   
End;
/
DanielNN
Moderador
Moderador
Mensagens: 641
Registrado em: Seg, 03 Set 2007 3:26 pm
Localização: Fortaleza - CE
att,

Daniel N.N.

Você precisará criar um tipo com a estrutura que quer retornar.
Como você precisa retornar conjunto de varchar, podes criar:

Selecionar tudo

CREATE OR REPLACE TYPE my_table_char IS TABLE OF VARCHAR2(10);
Sua função precisa retornar este tipo criado previamente e atribuir a variável de retorno a coleção de dados:

Selecionar tudo

CREATE OR REPLACE FUNCTION get_my_vachar(tipo IN VARCHAR2) RETURN my_table_char IS
  my_result my_table_char;

  CURSOR c  IS
    SELECT   t.desc
    FROM     my_table
    WHERE    t.tipo = tipo;
BEGIN
  OPEN c;
  LOOP
    FETCH c BULK COLLECT INTO my_result;
    EXIT WHEN c%NOTFOUND;
  END LOOP;
  RETURN my_result;
END get_my_vachar;
Agora poderás ver que retorna todos valores, e não apenas um:

Selecionar tudo

select * from table(get_my_vachar('N'));
Dá uma olhada também em:
http://glufke.net/oracle/viewtopic.php?t=3844
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 18 visitantes