Pular para o conteúdo
Visualizando 6 posts - 1 até 6 (de 6 do total)
  • Autor
    Posts
  • #79204
    nandaini
    Participante

      Bom dia pessoal!

      Sou novata em Oracle e estou usando como ferramenta de trabalho o SQL Developer.

      Fiz uma procedure que contém alguns parâmetros de entrada inclusive um cursor, porém, não estou sabendo testar essa procedure.

      Alguém poderia me ajudar?

      Esse é o cabeçalho da procedure:

      PROCEDURE PRC_PESSOA_BUSCA (
      pcod_operacao IN TB_VEN_PESSOA.cod_operacao%TYPE
      , pvcpo IN TB_VEN_PESSOA.COD_CLIENTE_CRED%TYPE
      , pnom_pessoa IN TB_VEN_PESSOA.nom_pessoa%TYPE
      , ptel_ddd IN TB_VEN_PESSOA_TELEFONE.TEL_DDD_INICIAL %TYPE
      , ptel_numero IN TB_VEN_PESSOA_TELEFONE.TEL_NUMERO_INICIAL%TYPE
      , out_cursor IN OUT t_cursor
      );

      Como faço para chamar essa procedure no SQL Developer passando os parâmetros?

      Obrigada!

      #79205
      chduarte
      Participante

        begin
        PRC_PESSOA_BUSCA(‘valor’,’valor’,00,’valor’);
        end;

        Pressione F5

        []

        #79207
        nandaini
        Participante

          Olá, obrigada pela ajuda

          Estou executando a procedure com 5 parâmetros sem o 6º parâmetro (que seria o cursor) conforme abaixo:

          begin
          pkg_ven_resgate_v2.PRC_PESSOA_BUSCA(221,null,null,null,null);
          end;

          recebo o seguinte erro:
          PLS-00306: wrong number or types of arguments in call to ‘PRC_PESSOA_BUSCA’

          Quando executo como o 6º parâmetro:

          begin
          pkg_ven_resgate_v2.PRC_PESSOA_BUSCA(221,null,null,null,null,null);
          end;

          recebo o seguinte erro:
          PLS-00567: cannot pass NULL to a NOT NULL constrained formal parameter

          Acredito que seja necessário declarar uma variável para o 6º parâmetro, porém não sei como fazer isso.

          Pode me ajudar?

          PS: essa procedure faz um select simples no banco.

          Obrigada!

          #79209
          chduarte
          Participante

            Se vc criou a procedure com 5 parametros, precisa passar 5 parametros a nao ser que exista valores default.

            O erro é porque vc esta passando um valor nulo a procedure precisa de um valor.

            Para declarar um variavel use o declare:

            declare
            x number;
            begin
            x := 0;
            sua_procedure(‘valor’,’valor’,’valor’,x);
            end;

            No site tahiti.oracle.com procure por PL/SQL e tera toda a documentacao para desenvolvimento.

            []

            #79211
            nandaini
            Participante

              Carlos,
              Já fiz o teste passando valores válidos para os parâmetros, mas como devo declarar uma variável para receber o conteúdo do 6º parâmetro sabendo que ele é o retorno da procedure?

              Acredito que para esse parâmetro eu teria que declarar de alguma forma para que me apresentasse as linhas de retorno da procedure.

              Já procurei na net situações semelhantes, mas não encontrei algo que pudesse me ajudar.

              aí vai a procedure:

              PROCEDURE PRC_PESSOA_BUSCA (
              pcod_operacao IN TB_VEN_PESSOA.cod_operacao%TYPE
              , pvcpo IN TB_VEN_PESSOA.COD_CLIENTE_CRED%TYPE
              , pnom_pessoa IN TB_VEN_PESSOA.nom_pessoa%TYPE
              , ptel_ddd IN TB_VEN_PESSOA_TELEFONE.TEL_DDD_INICIAL %TYPE
              , ptel_numero IN TB_VEN_PESSOA_TELEFONE.TEL_NUMERO_INICIAL%TYPE
              , out_cursor IN OUT t_cursor
              )

                IS
                    lcursor         t_cursor;
                    vsql            varchar2(32767);
                BEGIN
              
                    vsql := '';
                    vsql := vsql || ' SELECT '|| CHR(10);
                    vsql := vsql || '     DISTINCT '|| CHR(10);
                    vsql := vsql || '       COD_CLIENTE_CRED '|| CHR(10);
                    vsql := vsql || '       , PES.END_LOGRADOURO '|| CHR(10);
                    vsql := vsql || '       , PES.END_COMPLEMENTO '|| CHR(10);
                    vsql := vsql || ' FROM '|| CHR(10);
                    vsql := vsql || '     TB_VEN_PESSOA   PES '|| CHR(10);
                    vsql := vsql || '     , TB_VEN_PESSOA_TELEFONE  TEL '|| CHR(10);
                    vsql := vsql || ' WHERE '|| CHR(10);
                    vsql := vsql || '     PES.COD_OPERACAO = '''||pcod_operacao ||''''|| CHR(10);
                                          IF ptel_ddd IS NOT NULL THEN
                    vsql := vsql || '         AND PES.COD_OPERACAO = TEL.COD_OPERACAO '|| CHR(10);
                    vsql := vsql || '         AND PES.COD_PESSOA = TEL.COD_PESSOA '|| CHR(10);
                                          END IF;
                                          IF pvcpo IS NOT NULL THEN
                    vsql := vsql || '         AND COD_CLIENTE_CRED = '''||pvcpo ||''' '|| CHR(10);
                                          END IF;
                                          IF pnom_pessoa IS NOT NULL THEN
                    vsql := vsql || '         AND PES.NOM_PESSOA LIKE UPPER('''||pnom_pessoa||''') || ''%'')) '|| CHR(10);
                                          END IF;
                    vsql := vsql || '     AND ROWNUM < 100 '|| CHR(10);
                    vsql := vsql || '     ORDER BY PES.NOM_PESSOA';
              
                OPEN lcursor FOR vsql;
                out_cursor := lcursor;
              END;
              
              #79219
              chduarte
              Participante

                out_cursor nao precisa ser IN OUT. Pode ser somente out.

                garanta que este type t_cursor exista.

                declare
                inout_cursor t_cursor;
                begin
                proc(xxx,xxx,xxx,xxx,inout_cursor);
                end;

                []

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