Pular para o conteúdo
Visualizando 8 posts - 1 até 8 (de 8 do total)
  • Autor
    Posts
  • #86031
    secco
    Participante

      Bom dia pessoal…
      Já fiz dversas stored procedures em firebird e um recurso muito bom e prático que tem lá é o SUSPEND, o qual eu uso dentro de um FOR SELECT para ter uma lista como resultado.

      Gostaria de saber se existe o mesmo comando (ou equivalente) em Oracle e como funciona.
      Se alguém tiver um trecho de código que faz o que citei acima seria de grande valia.

      Grato desde já.
      Abraços.

      #86032
      Ishii
      Participante

        Olá,

        O que tem no Oracle que poderia ser utilizando em vez do Suspend é uma função, pois ela pode ser usada em select também e retorna valores linha a linha….

        []s Ishii

        #86034
        secco
        Participante

          CREATE OR ALTER PROCEDURE CODIGO_GRUPOS (cod_filial_in integer)
          returns (codgrupo integer)
          as
          begin
          FOR SELECT COD_GRUPO
          FROM TB_GRUPO
          WHERE COD_FILIAL = cod_filial_in
          INTO :CODGRUPO DO
          SUSPEND;
          end

          Esta é uma procedure de exemplo em firebird, onde o cara passa uma filial e recebe todos os grupos daquela filial como resultado (o suspend faz isso), porque tem uma variavel de retorno nomeada “codgrupo integer”.
          No Oracle não consegui nomear esta variavel de retorno para fazer o mesmo.
          Consegue converter este código para oracle? Tem jeito?

          Abraço

          #86035
          Ishii
          Participante

            Olá,

            Seria mais ou menos assim:


            CREATE OR REPLACE function CODIGO_GRUPOS (cod_filial_in integer)

            returns integer is

            codgrupo tb_grupo.cod_grupo%type;

            begin
            SELECT COD_GRUPO
            into CODGRUPO
            FROM TB_GRUPO

            WHERE COD_FILIAL = cod_filial_in;

            return codgrupo;

            end;

            Para executar a função pode usar um select…


            select CODIGO_GRUPOS(cod_filial) from tb_filial;

            []s Ishii

            #86043
            secco
            Participante

              Aah entendi oque vc quis fazer ai sim…
              Mas vc entende tb que o que vc me explicou é o contrário do q eu pedi né?
              No seu caso, a procedure retorna somente um valor, ao contrário do que é feito com o SUSPEND.

              #86044
              Marcio68Almeida
              Participante

                [quote=”secco”:hnhx0qlu]Aah entendi oque vc quis fazer ai sim…
                Mas vc entende tb que o que vc me explicou é o contrário do q eu pedi né?
                No seu caso, a procedure retorna somente um valor, ao contrário do que é feito com o SUSPEND.[/quote]

                Na verdade o que você procura é a solução proposta OU um cursor que fará um loop trazendo as linhas desejadas.

                #86045
                secco
                Participante

                  Eu até achei algo que faz +- isto.
                  Mas olha o tamanho da jaca:
                  http://it.toolbox.com/blogs/database-so … racle-7802
                  Ai fica complicado também. Poxa no FB eh tão simples, não sei como no Oracle também não é assim.
                  😥

                  #86046
                  secco
                  Participante

                    É que fazer um código desse tamanho só por causa de um retorno fica complicado.

                  Visualizando 8 posts - 1 até 8 (de 8 do total)
                  • Você deve fazer login para responder a este tópico.