Pular para o conteúdo
Visualizando 12 posts - 1 até 12 (de 12 do total)
  • Autor
    Posts
  • #91516
    Girino
    Participante

      Olá..!! 8)

      Porque quando executo a Procedure Abaixo ela não me retorna nenhum rsultado na tela, apenas que foi executada com sucesso??? 🙄
      Como fazer para Mostrar o resultado??? 💡

      CREATE OR REPLACE PROCEDURE TESTANDO AS
      REGISTRO FUNCIONARIOS%Rowtype;
      CURSOR CURSORREGISTRO IS

      SELECT *FROM FUNCIONARIOS;

      BEGIN

      OPEN CURSORREGISTRO;
      LOOP
      FETCH CURSORREGISTRO INTO REGISTRO;
      EXIT WHEN CURSORREGISTRO%NOTFOUND;
      END LOOP;

      CLOSE CURSORREGISTRO;

      END;

      Muito Obrigado..!! 😀

      Renato 😉

      #91518
      fsitja
      Participante

        Uma stored procedure, ou qualquer bloco de código PL/SQL, é um programa que roda no servidor, não é um componente de frontend, que exiba resultados na tela.

        O que você pode usar, eventualmente, para testes e validação, é a package DBMS_OUTPUT com a procedure DBMS_OUTPUT.PUT_LINE e exibir uma saída no console do cliente.



        SQL> set serveroutput on
        SQL>
        SQL> declare
        2 cursor cur_versao is
        3 select banner from v$version;
        4 rec_versao cur_versao%rowtype;
        5 begin
        6 open cur_versao;
        7 fetch cur_versao
        8 into rec_versao;
        9 while cur_versao%found
        10 loop
        11 dbms_output.put_line(rec_versao.banner);
        12 fetch cur_versao
        13 into rec_versao;
        14 end loop;
        15 close cur_versao;
        16 end;
        17 /

        Oracle Database 11g Enterprise Edition Release 11.1.0.6.0 - 64bit Production
        PL/SQL Release 11.1.0.6.0 - Production
        CORE 11.1.0.6.0 Production
        TNS for 64-bit Windows: Version 11.1.0.6.0 - Production
        NLSRTL Version 11.1.0.6.0 - Production

        PL/SQL procedure successfully completed

        SQL>

        #91523
        Girino
        Participante

          Olá..!! 8)

          Como colocar o meu select no código que vc passou. 💡

          Tentei adaptar mais não consegui..!! 😥

          Muito Obrigado..!!

          Renato

          #91524
          Girino
          Participante

            tentei de duas formas, Veja:

            CREATE OR REPLACE PROCEDURE TESTANDO AS
            cursor cur_versao is
            select EMPRESA,CODIGO FROM FUNCIONARIOS;
            rec_versao cur_versao%rowtype;
            begin
            open cur_versao;
            fetch cur_versao
            into rec_versao;
            while cur_versao%found
            loop
            dbms_output.put_line(rec_versao.EMPRESA, rec_versao.CODIGO);
            fetch cur_versao
            into rec_versao;
            end loop;
            close cur_versao;
            end;


            CREATE OR REPLACE PROCEDURE TESTANDO AS
            cursor cur_versao is
            select *FROM FUNCIONARIOS;
            rec_versao cur_versao%rowtype;
            begin
            open cur_versao;
            fetch cur_versao
            into rec_versao;
            while cur_versao%found
            loop
            dbms_output.put_line(rec_versao);
            fetch cur_versao
            into rec_versao;
            end loop;
            close cur_versao;
            end;

            O que estou fazendo de errado??? 🙄

            Valeu..!! 😉

            #91530
            burga
            Participante

              Tanto no primeiro quanto no segundo código você está errando no DBMS_OUTPUT.PUT_LINE.

              Nesta função você deve passar como parâmetro UMA cadeia de caracteres. No primeiro exemplo o Oracle entende que você está passando dois parâmetros de entrada e no segundo um rowtype, o correto seria transformar o que você deseja imprimir em uma única cadeia de caracteres…

              Ex:

              dbms_output.put_line(rec_versao.EMPRESA || ', ' || rec_versao.CODIGO);

              #91571
              Girino
              Participante

                OK..!! 8)

                Muito Obrigado..!! 😀

                Renato

                #91639
                Girino
                Participante

                  Olá..!!

                  Engraçado, quando eu tento executar esta procedure no Crystal Reports não gera nenhum erro, porém ele não me retorna nada..!! 😥

                  Por que será??? 🙄

                  abraços..!! 😀

                  Renato

                  #91807
                  Girino
                  Participante

                    Olá..!! 😀

                    Estou fazendo da seguinte forma: 😉

                    create or replace PROCEDURE RT AS
                    P_EMPRESA VARCHAR2(2);
                    P_CENTRO VARCHAR2(8);
                    CURSOR CR IS
                    SELECT EMPRESA,CENTRO FROM FUNCIONARIOS;
                    BEGIN
                    OPEN CR;
                    LOOP
                    FETCH CR INTO P_EMPRESA,P_CENTRO;
                    EXIT WHEN CR%NOTFOUND;
                    DBMS_OUTPUT.PUT_LINE (‘CODIGO DA EMPRESA: ‘ || P_EMPRESA || ‘ ‘ || ‘CENTRO DE CUSTO: ‘ || P_CENTRO);
                    END LOOP;
                    CLOSE CR;
                    END;

                    No prompt de linha de comando do ORACLE funciona perfeitamente.
                    O Problema é quando eu executo a procedure no crystal não aparecem os campos EMPRESA e CENTRO no relatório. Na verdade não dá nenhum erro, porém também não retorna nenhum campo. 😥

                    Se tiver alguma solução..!! Talvez criar uma tabela para inserir os dados da procedure, sei lá..!!

                    abraços e muito obrigado.. 😀

                    Renato

                    #91813
                    fsitja
                    Participante

                      Você não tem que usar procedure para isso. O DBMS_OUTPUT não quer dizer nada para quem chama a procedure.

                      Não uso Crystal Report, mas penso que você deveria colocar o SQL diretamente na ferramenta, apenas o SELECT, ainda mais considerando que é algo bastante simples.

                      #91816
                      Girino
                      Participante

                        Olá..!! 8)

                        Concordo com você que o exemplo que eu passei é bem simples mesmo.
                        A intenção é de pegar a idéia de como fazer e trabalhar em casos complexos já que Tabelas, Tabelas Temporárias e Views são um pouco limitadas ao contrario das procedures e funções onde você pode trabalhar com muito mais recursos as informações..!! 😀

                        Valeu..!! Se tiver alguma idéia, posta ai blz..!! 😉

                        abraço,

                        Renato 8)

                        #91820
                        fsitja
                        Participante

                          Blza, você estava testando a possibilidade de usar algo mais complexo, entendi agora 😉

                          De qualquer forma, SQL é muito rico e consegue atender a quase todas as perguntas que você possa fazer, com desempenho melhor do que usando PL/SQL. Porém, se você não conseguir de forma nenhuma fazer algo com SQL puro, dê uma olhada em table functions. Usando table functions em views, setando contexts dá para fazer muita coisa bisonha 😈

                          http://www.oracle.com/pls/db112/to_URL? … 23LNPLS915

                          Feliz Ano-Novo,
                          Francisco.

                          #91822
                          Girino
                          Participante

                            Olá Francisco..!! 8)

                            Vou dar uma olhada na dica que vc postou. 😀

                            Um feliz ano novo pra vc tb..!! 😉

                            Renato

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