Pular para o conteúdo
Visualizando 6 posts - 16 até 21 (de 21 do total)
  • Autor
    Posts
  • #91143
    fsitja
    Participante

      Postei acima como retornar os valores, se você quiser combinar com o que você já produziu até agora.

      Tendo dúvidas mais específicas, após ter tentado modificar o código, sinta-se a vontade para perguntar.

      #91144
      Girino
      Participante

        Olá..!! 8)

        Desculpe pela amolação e tudo mais.. 😳

        Como adaptar o código abaixo:

        CREATE PROCEDURE TESTE
        @PAR1 VARCHAR(4)
        AS
        SELECT *FROM TABELA
        WHERE CODIGO = @PAR1

        Por este:

        CREATE OR REPLACE PROCEDURE
        test_ref(cur_output OUT sys_refcursor) IS
        BEGIN
        OPEN cur_output FOR
        WITH teste AS
        (SELECT 1 num FROM dual)
        SELECT num
        FROM teste;
        END;

        Muito Obrigado mesmo..!! 😀

        #91145
        burga
        Participante

          Oi Girino,

          Adapte o código do Mauro depois de feita a correção que eu passei, com o segundo exemplo do fsitja. Criando um pacote e uma função com retorno PIPELINED, tipo de saída sendo do tipo ROWTYPE da sua tabela e substituindo a linha do código do Mauro (abaixo)

          DBMS_OUTPUT.PUT_LINE(v_codigo);

          pela linha do exemplo do fsitja (a seguir)

          PIPE ROW(v_saida(i));

          Sendo que a variavel v_saida é a que eu citei anteriormente como “ROWTYPE da sua tabela”. De resto você junta os dois códigos que os colegas passaram. 🙂

          EDIT:
          Ficou meio confusa a explicação… Se ninguém postar antes, depois eu posto pra você com mais detalhes!

          #91156
          Girino
          Participante

            Olá Burga..!! 8)
            Tudo Bem? 😉

            Se você puder fazer essa gentileza eu agradeceria muito..!! 😆

            um abraço..!! 🙂

            Renato 8)

            #91161
            burga
            Participante

              Oi Renato,

              Segue o código tomando como base o código do fsitja:

              CREATE OR REPLACE PACKAGE pk_type AS
              TYPE t_tab IS TABLE OF apontamento%rowtype;
              END pk_type;
              /
              CREATE OR REPLACE FUNCTION sp_test(p_parametro IN VARCHAR2) return pk_type.t_tab
              PIPELINED IS
              v_saida pk_type.t_tab;
              v_refcur SYS_REFCURSOR;
              BEGIN
              OPEN v_refcur FOR
              select * from APONTAMENTO where CODCC_R = p_parametro;
              FETCH v_refcur BULK COLLECT
              INTO v_saida;
              close v_refcur;
              for i in 1 .. v_saida.count
              loop
              PIPE ROW(v_saida(i));
              end loop;
              END sp_test;
              /

              E para ver o conteúdo buscado:

              select * from table(sp_test(INFORME_O_CODIGO));

              OBS: substitua a string INFORME_O_CODIGO pelo código buscado por você.

              A compreensão do código fica por sua conta. Para aprender mais sobre a programação em PL/SQL você pode fazer download de alguns tutoriais aqui:

              https://profissionaloracle.com.br/modules.php?name=Downloads&cid=41

              Note ainda que talvez, pro seu caso, a abordagem adotada aqui pode não ser a melhor opção (retorno linha a linha), por isto insisto em dizer que tente compreender o que foi feito e fazer uma pesquisa sobre outras formas de se conseguir o que você quer, podendo começar buscando pelas outras maneiras citadas pelo nosso amigo Francisco (fsitja). 😉

              #91177
              Girino
              Participante

                Olá..!! 8)

                Uma ótima Tarde à Todos..!! 😀

                Funcionou Belezinha “Burga” 😀

                Gostaria de agradecer à todos que contribuiram para a resolução do meu tópico.

                Muito Obrigado mesmo e espero que essa dúvida seja útil para outros membros que acessarem o fórum..!! 😉

                abraços..!!

                Renato 8)

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