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

      Tenho a seguinte procedure:

      create or replace PROCEDURE SP_INSERT_CLIENTE
      (sp_codigo Cliente.Codigo%type,
      sp_nome Cliente.Nome%type,
      sp_endereco Cliente.Endereco%type,
      sp_dtcadastro Cliente.DtCadastro%type
      )
      IS
      BEGIN
      INSERT INTO CLIENTE(Codigo,Nome,Endereco,DtCadastro)
      VALUES(sp_codigo,sp_nome,sp_endereco,sp_dtcadastro);
      End;

      Como faço para verificar se ela foi executada e transferir o resultado para o form

      #82582
      rodfbar
      Participante

        OLA..

        VOCE PODE CRIAR VARIAVEIS DO TIPO “OUT”

        EXEMPLO

        create or replace PROCEDURE SP_INSERT_CLIENTE
        (sp_codigo Cliente.Codigo%type,
        sp_nome Cliente.Nome%type,
        sp_endereco Cliente.Endereco%type,
        sp_dtcadastro Cliente.DtCadastro%type
        QTDE_LINHAS_INSERIDAS OUT NUMBER
        )
        IS
        BEGIN
        INSERT INTO CLIENTE(Codigo,Nome,Endereco,DtCadastro)

        VALUES(sp_codigo,sp_nome,sp_endereco,sp_dtcadastro);

        QTDE_LINHAS_INSERIDAS := SQL%ROWCOUNT;
        End;

        e la no seu programa vc trabalha essa variavel


        begin

        SP_INSERT_CLIENTE (p1,p2,p3,p4,p_inserts)

        if p_inserts = 0 then
        erro();
        end if;
        end

        #82583
        rodfbar
        Participante

          desculpe foi coisa a mais…

          sem o [ b ] [ / b ] é q tentei colocar negrito

          #82584
          Anônimo

            Rodfbar, não deu certo. Se vc puder detalhar melhor desde obrigada.
            Obs: Sou inciante e estou usando o oracle 10g.
            Obrigada

            #82588
            rodfbar
            Participante

              ok.. eh bem longa a explicação… tem duas formas de vc trabalhar sua procedure

              1º com “raise”
              exemplo


              create or replace PROCEDURE SP_INSERT_CLIENTE
              (sp_codigo Cliente.Codigo%type,
              sp_nome Cliente.Nome%type,
              sp_endereco Cliente.Endereco%type,
              sp_dtcadastro Cliente.DtCadastro%type
              )
              IS
              BEGIN
              begin
              INSERT INTO CLIENTE(Codigo,Nome,Endereco,DtCadastro)
              VALUES(sp_codigo,sp_nome,sp_endereco,sp_dtcadastro);
              exception
              when others then
              raise_application_error(-20001,'Erro: ' || sqlerrm); /retorna erro para sua aplicação/
              end;
              --
              if sql%rowcount = 0 then /sql%rowcount = quantidade de linhas afetadas na dml/
              raise_application_Error(-20002,'Não foi inserida nenhuma linha;'); /retorna erro para sua aplicação/

              end if;

              End;

              depois voce precisa tratar o erro onde vc faz a chamada a procedure
              se for pelo forms:

              begin
              chama a procedure
              exception
              when others then
              message(sqlerrm);
              message(' ',no_acknowledge)
              raise form_trigger_failure;
              end;

              2º usando variaveis do tipo como no exemplo q ja te passei

              se vc puder passar em qual linguagem vc esta fazendo a chamada à procedure e qual o erro q retorna….

              espero ter ajudado

              abrçs[/code]

              #82589
              Anônimo

                RodFar, o erro esta dando dentro do oracle10g quando eu clico no botão compilar. Ele não esta aceitando a linhas:
                “QTDE_LINHAS_INSERIDAS OUT NUMBER”
                “QTDE_LINHAS_INSERIDAS := SQL%ROWCOUNT;”
                Outra coisa “SQL%ROWCOUNT” faz.
                Muito obrigado pela atenção.

                #82590
                Anônimo

                  RodFar, o erro esta dando dentro do oracle10g quando eu clico no botão compilar. Ele não esta aceitando a linhas:
                  “QTDE_LINHAS_INSERIDAS OUT NUMBER”
                  “QTDE_LINHAS_INSERIDAS := SQL%ROWCOUNT;”
                  Outra coisa “SQL%ROWCOUNT” faz.
                  Muito obrigado pela atenção.

                  #82614
                  rodfbar
                  Participante

                    ola…

                    deve estar dando erro pois no script que te passei ficou sem uma virgula no final do parametro anterior ao parametro “out”:

                    create or replace PROCEDURE SP_INSERT_CLIENTE
                    (sp_codigo Cliente.Codigo%type,
                    sp_nome Cliente.Nome%type,
                    sp_endereco Cliente.Endereco%type,
                    sp_dtcadastro Cliente.DtCadastro%type , <- olha a danada q faltou
                    QTDE_LINHAS_INSERIDAS OUT NUMBER
                    )

                    O SQL%ROWCOUNT retorna a quantidade de linhas que o seu DML afetou no banco

                    tipo um insert simples retorna "1" (1 linha inserida)
                    um update ou delete podem variar de acordo com sua clausula where (por exemplo)

                    abrçs

                    #82615
                    Anônimo

                      rodfbar, valeu pela ajuda vou testar.
                      Na procedure de busca o return esta no lugar certo.

                      create or replace PROCEDURE SP_BUSCA (varbusca as integer)
                      RETURN (
                      sp_codigo integer,
                      sp_nome varchar(40),
                      sp_endereco(40),
                      sp_dtcadastro date
                      )
                      IS
                      BEGIN
                      SELECT INTO Codigo, Nome, Endereco, DtCadastro from Cliente where Cliente.Codigo=varbusca;
                      end;

                      #82616
                      rodfbar
                      Participante

                        ola..

                        não se pode dar return em procedures soh em caso de paremetros “out” … apenas em funções voce consegue dar o return…

                        um exemplo bem pratico pra vc fazer desta função seria


                        create or replace FUNCTION SP_BUSCA (varbusca as integer)
                        RETURN CLIENTE%ROWTYPE IS
                        VV_CLIENTE CLIENTE%ROWTYPE;
                        BEGIN
                        SELECT Codigo, Nome, Endereco, DtCadastro
                        INTO VV_CLIENTE.Codigo, VV_CLIENTE.Nome, VV_CLIENTE.Endereco, VV_CLIENTE.DtCadastro
                        from Cliente
                        where Cliente.Codigo=varbusca;
                        --
                        RETURN VV_CLIENTE;
                        end;

                        soh q na sua aplicação vc deve fazer uma variavel do mesmo tipo receber sua função


                        declare
                        v_retorno cliente%rowtype;
                        begin
                        v_retorno := SP_BUSCA (parametro);
                        end;

                        #82620
                        Anônimo

                          rodfbar, agora deu certo no oracle só que na rotina do programa não esta retornando nada. Não sei se esta codificado certo se vc puder dar uma olhada, obrigada.
                          Outro esclarecimento quando declaro Dim var1, var2 as string só a variavel “var2” é do tipo string ou todas duas são strings
                          **INSERT.ASP****


                          #82621
                          rodfbar
                          Participante

                            ola Ana…

                            agora vc me pegou… nao conheço asp…

                            creio q suas variaveis vao ser tipo String sim… no caso da sua duvida…

                            porem como tratar a chamada a procedure infelizmente nao vou poder te ajudar…talvez pra vc seria mais facil na função criar exceptions e tratar as mesmas no seu código… tipo um “try” antes da sua chamada… mas nao conheço asp pra lhe ajudar…

                            desculpe…

                            abrçs

                            #82622
                            Anônimo

                              rodfbar, mesmo assim obrigada.

                              #82635
                              Anônimo

                                rodfbar, quando eu clico em compilar esta dando erro:
                                Linha 1 – PLS-00103: Encontrado o símbolo “AS” quando um dos seguintes
                                Linha 2 – PLS-00103: Encontrado o símbolo “IS” quando um dos seguintes

                                Na linha 1 troquei para “NUMBER” mesmo assim continuou dando erro.

                                “create or replace FUNCTION SP_BUSCA (varbusca as integer)
                                RETURN CLIENTE%ROWTYPE IS VV_CLIENTE CLIENTE%ROWTYPE;
                                BEGIN
                                SELECT Codigo, Nome, Endereco, DtCadastro
                                INTO VV_CLIENTE.Codigo, VV_CLIENTE.Nome,
                                VV_CLIENTE.Endereco, VV_CLIENTE.DtCadastro
                                from Cliente where Cliente.Codigo=varbusca;

                                RETURN VV_CLIENTE;
                                end;

                                Outra pergunta “VV_CLIENTE” é uma variavel com diversos registros?
                                Seria um “RecordSet”?

                                #82636
                                rodfbar
                                Participante

                                  tenta assim


                                  create or replace FUNCTION SP_BUSCA (varbusca number)
                                  RETURN CLIENTE%ROWTYPE IS
                                  begin
                                  --codigos;
                                  end SP_BUSCA;

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