Pular para o conteúdo
Visualizando 15 posts - 1 até 15 (de 20 do total)
  • Autor
    Posts
  • #82773
    Anônimo

      Como funciona um packages?
      Eu posso criar uma function ou procedure dentro dele?
      Se possivel postar um exemplo.

      #82774
      Avatar de Marcio68AlmeidaMarcio68Almeida
      Participante

        uma package é um conjunto de procedures e/ou functions que trabalham de forma integrada, por isso elas são empacotadas.
        a package é dividida em duas partes, header e body.
        exemplos você encontra à vontade nas literaturas e links da internet…

        #82777
        Avatar de IshiiIshii
        Participante

          Olá,

          Package nada mais é que um pacote de procedures e functions, isso otimiza bastante a performance uma vez que o instanciamento de uma procedure ou function dentro de uma package carrega toda a package e executa as procedures e functions em memória…

          Ela se divide em Especificação e Corpo sendo que na Especificação são declaradas as Procedures e seus parâmetros e suas variáveis globais, já no Corpo podem ser declaradas variáveis da Procedure/function e suas rotinas.

          Segue exemplo simplificado:

          create or replace package pck_teste is

          function func_teste (pIN_fun varchar2) return number;

          procedure proc_teste (pIN_pro varchar2);

          end pck_teste;

          create or replace package body pck_teste as

          function func_teste (pIN_fun varchar2) return number is
          --
          nReturn number;
          --
          begin
          --
          null;
          --
          return nReturn;
          --

          end func_teste;

          procedure proc_teste (pIN_pro varchar2) is
          --
          begin
          --
          null;
          --

          end proc_teste;

          end pck_teste;

          Sempre crie a Especificação primeiro e depois o Corpo.

          Espero ter ajudado.

          []s Ishii

          #82826
          Anônimo

            Ishii, tentei montar uma procedure e uma function só que não deu certo.
            Se for possivel confere para mim.

            ESPECIFICAÇÃO
            create or replace package TESTE as
            procedure INSERT_CLIENTE(
            sp_nome ClIente.Nome%type,
            sp_endereco Cliente.Endereco%type,
            sp_dtcadastro Cliente.DtCadastro%type,
            qte_linhas OUT INTEGER);

            function BUSCA_CLIENTE(varbusca in number)
            RETURN CLIENTE%ROWTYPE IS var_CLIENTE CLIENTE%ROWTYPE;
            end TESTE;

            CORPO TEXTO
            create or replace package body “TESTE” is
            procedure INSERT_CLIENTE
            is
            begin
            INSERT INTO CLIENTE(Nome,Endereco,DtCadastro)
            VALUES(sp_nome,sp_endereco,sp_dtcadastro);
            qte_linhas := sql%ROWCOUNT;
            end INSERT_CLIENTE;

            function BUSCA_CLIENTE(varbusca in number)is
            BEGIN
            SELECT Codigo, Nome, Endereco, DtCadastro
            INTO var_CLIENTE.Codigo, var_CLIENTE.Nome, var_CLIENTE.Endereco, var_CLIENTE.DtCadastro from Cliente where Cliente.Codigo=varbusca;
            RETURN var_CLIENTE;
            end BUSCA_CLIENTE;
            end TESTE;

            #82827
            Anônimo

              Ishii, tentei montar uma procedure e uma function só que não deu certo.
              Se for possivel confere para mim.

              ESPECIFICAÇÃO
              create or replace package TESTE as
              procedure INSERT_CLIENTE(
              sp_nome ClIente.Nome%type,
              sp_endereco Cliente.Endereco%type,
              sp_dtcadastro Cliente.DtCadastro%type,
              qte_linhas OUT INTEGER);

              function BUSCA_CLIENTE(varbusca in number)
              RETURN CLIENTE%ROWTYPE IS var_CLIENTE CLIENTE%ROWTYPE;
              end TESTE;

              CORPO TEXTO
              create or replace package body “TESTE” is
              procedure INSERT_CLIENTE
              is
              begin
              INSERT INTO CLIENTE(Nome,Endereco,DtCadastro)
              VALUES(sp_nome,sp_endereco,sp_dtcadastro);
              qte_linhas := sql%ROWCOUNT;
              end INSERT_CLIENTE;

              function BUSCA_CLIENTE(varbusca in number)is
              BEGIN
              SELECT Codigo, Nome, Endereco, DtCadastro
              INTO var_CLIENTE.Codigo, var_CLIENTE.Nome, var_CLIENTE.Endereco, var_CLIENTE.DtCadastro from Cliente where Cliente.Codigo=varbusca;
              RETURN var_CLIENTE;
              end BUSCA_CLIENTE;
              end TESTE;

              #82828
              Anônimo

                Ishii, tentei montar uma procedure e uma function só que não deu certo.
                Se for possivel confere para mim.

                ESPECIFICAÇÃO
                create or replace package TESTE as
                procedure INSERT_CLIENTE(
                sp_nome ClIente.Nome%type,
                sp_endereco Cliente.Endereco%type,
                sp_dtcadastro Cliente.DtCadastro%type,
                qte_linhas OUT INTEGER);

                function BUSCA_CLIENTE(varbusca in number)
                RETURN CLIENTE%ROWTYPE IS var_CLIENTE CLIENTE%ROWTYPE;
                end TESTE;

                CORPO TEXTO
                create or replace package body “TESTE” is
                procedure INSERT_CLIENTE
                is
                begin
                INSERT INTO CLIENTE(Nome,Endereco,DtCadastro)
                VALUES(sp_nome,sp_endereco,sp_dtcadastro);
                qte_linhas := sql%ROWCOUNT;
                end INSERT_CLIENTE;

                function BUSCA_CLIENTE(varbusca in number)is
                BEGIN
                SELECT Codigo, Nome, Endereco, DtCadastro
                INTO var_CLIENTE.Codigo, var_CLIENTE.Nome, var_CLIENTE.Endereco, var_CLIENTE.DtCadastro from Cliente where Cliente.Codigo=varbusca;
                RETURN var_CLIENTE;
                end BUSCA_CLIENTE;
                end TESTE;

                #82833
                Avatar de IshiiIshii
                Participante

                  Olá,
                  Qual a msg de erro que retornou?
                  []s Ishii[/code]

                  #82834
                  Anônimo

                    Ishii, ERROS da parte de ESPECIFICAÇÃO:
                    Falha de compilação; linha 10 (13:59:48)
                    PLS-00103: Encontrado o símbolo “IS” quando um dos seguintes símbolos era esperado: return
                    Falha de compilação; linha 10 (13:59:48)
                    PLS-00103: Encontrado o símbolo “VAR_CLIENTE” quando um dos seguintes símbolos era esperado: language
                    Falha de compilação; linha 11 (13:59:48)
                    PLS-00103: Encontrado o símbolo “END” quando um dos seguintes símbolos era esperado: begin function package pragma procedure subtype type use form current cursor

                    E na parte do CORPO DO TEXTO:

                    Falha de compilação; linha 10 (14:02:03)
                    PLS-00103: Encontrado o símbolo “VAR_CLIENTE” quando um dos seguintes símbolos era esperado: language
                    Falha de compilação; linha 11 (14:02:03)
                    PLS-00103: Encontrado o símbolo “END” quando um dos seguintes símbolos era esperado: begin function package pragma procedure subtype type use form current cursor
                    Falha de compilação; linha 10 (14:02:03)
                    PLS-00103: Encontrado o símbolo “IS” quando um dos seguintes símbolos era esperado: return

                    eu não estou sabendo montar.
                    Obrigada

                    #82839
                    Avatar de IshiiIshii
                    Participante

                      Olá,

                      Tente assim:

                      create or replace package TESTE as

                      procedure INSERT_CLIENTE(
                      sp_nome ClIente.Nome%type,
                      sp_endereco Cliente.Endereco%type,
                      sp_dtcadastro Cliente.DtCadastro%type,

                      qte_linhas OUT INTEGER);

                      function BUSCA_CLIENTE(varbusca in number)
                      RETURN varchar2 IS
                      var_CLIENTE varchar2;
                      end TESTE;

                      Para o corpo:
                      create or replace package body "TESTE" is
                      procedure INSERT_CLIENTE
                      is
                      begin
                      INSERT INTO CLIENTE(Nome,Endereco,DtCadastro)
                      VALUES(sp_nome,sp_endereco,sp_dtcadastro);
                      qte_linhas := sql%ROWCOUNT;
                      end INSERT_CLIENTE;

                      function BUSCA_CLIENTE(varbusca in number)is
                      var_Cliente varchar2;
                      BEGIN
                      SELECT Codigo||'.'|| Nome||'.'|| Endereco||'.'|| DtCadastro
                      INTO var_CLIENTE
                      from Cliente where Cliente.Codigo=varbusca;
                      RETURN var_CLIENTE;
                      end BUSCA_CLIENTE;
                      end TESTE;

                      Acho que tentar retornar o cursor como vc queria não deve funcionar desta forma. Coloquei o ponto para separar mas veja como vc precisa ou tente mais functions…

                      []s Ishii

                      #82893
                      Anônimo

                        Ishii, muito obrigada pela ajuda mais ainda não funcionou quando clico em compilar tanto na Especificação quanto no Corpo, esta dando o seguinte erro:
                        Falha de compilação; linha 9 (18:59:03)
                        PLS-00103: Encontrado o símbolo “IS” quando um dos seguintes símbolos era esperado: return
                        Falha de compilação; linha 8 (18:59:03)
                        PLS-00103: Encontrado o símbolo “VAR_CLIENTE” quando um dos seguintes símbolos era esperado: language

                        #82897
                        Avatar de IshiiIshii
                        Participante

                          Olá,

                          Montei as tabelas aqui na minha BD de teste e corrigi outras coisas que não tinha visto…

                          create or replace package TESTE as

                          procedure INSERT_CLIENTE(
                          sp_nome ClIente.Nome%type,
                          sp_endereco Cliente.Endereco%type,
                          sp_dtcadastro Cliente.DtCadastro%type,

                          qte_linhas OUT INTEGER);

                          function BUSCA_CLIENTE(varbusca in number)
                          RETURN varchar2 ;
                          var_CLIENTE varchar2(2000);
                          end TESTE;

                          Corpo:

                          create or replace package body "TESTE" is
                          procedure INSERT_CLIENTE(
                          sp_nome ClIente.Nome%type,
                          sp_endereco Cliente.Endereco%type,
                          sp_dtcadastro Cliente.DtCadastro%type,
                          qte_linhas OUT INTEGER) is
                          begin
                          INSERT INTO CLIENTE(Nome,Endereco,DtCadastro)
                          VALUES(sp_nome,sp_endereco,sp_dtcadastro);
                          qte_linhas := sql%ROWCOUNT;

                          end INSERT_CLIENTE;

                          function BUSCA_CLIENTE(varbusca in number) return varchar2 is
                          var_Cliente varchar2(2000);
                          BEGIN
                          SELECT Codigo||'.'|| Nome||'.'|| Endereco||'.'|| DtCadastro
                          INTO var_CLIENTE
                          from Cliente where Cliente.Codigo=varbusca;
                          RETURN var_CLIENTE;
                          end BUSCA_CLIENTE;
                          end TESTE;

                          Tente novamente 🙂

                          []s Ishii

                          #82903
                          Anônimo

                            Ishii, não deu certo, erros que estão ocorrendo:
                            Falha de compilação; linha 9 (18:46:02)
                            PLS-00103: Encontrado o símbolo “VAR_CLIENTE” quando um dos seguintes símbolos era esperado: language
                            Falha de compilação; linha 10 (18:46:02)
                            PLS-00103: Encontrado o símbolo “END” quando um dos seguintes símbolos era esperado: begin function package pragma procedure subtype type use form current cursor
                            Falha de compilação; linha 7 (18:46:02)
                            PLS-00103: Encontrado o símbolo “IS” quando um dos seguintes símbolos era esperado: begin end function package pragma procedure subtype type use form current cursor
                            Falha de compilação; linha 14 (18:46:02)
                            PLS-00103: Encontrado o símbolo “FUNCTION”
                            Falha de compilação; linha 14 (18:46:02)
                            PLS-00103: Encontrado o símbolo “NUMBER” quando um dos seguintes símbolos era esperado: (
                            Falha de compilação; linha 22 (18:46:02)
                            PLS-00103: Encontrado o símbolo “END” quando um dos seguintes símbolos era esperado: begin function package pragma procedure form

                            #82904
                            Avatar de IshiiIshii
                            Participante

                              Olá,

                              Tente rodar primeiro somente a espec e veja se deu algum erro e depois somente o corpo, me mande os erros separados…

                              []s Ishii

                              #82908
                              Anônimo

                                Ishii, parece que vai deu certo. Muito obrigada pela ajuda.
                                Outra pergunta:
                                Quando eu chamar no codigo em ASP eu chamo e package ou direto a procedure e a function.

                                #82909
                                Avatar de IshiiIshii
                                Participante

                                  Olá,

                                  Para chamar a procedure ou a função use package.procedure ou no caso da função package.function

                                  No caso do exemplo seria assim:

                                  TESTE.INSERT_CLIENTE(‘ANA’,’RUA QUE SOBE E DESCE’,sysdate,:qtd);

                                  🙂

                                  []s Ishii

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