Pular para o conteúdo
  • Este tópico contém 5 respostas, 3 vozes e foi atualizado pela última vez 18 anos atrás por wesleyNet.
Visualizando 6 posts - 1 até 6 (de 6 do total)
  • Autor
    Posts
  • #78554
    wesleyNet
    Participante

      Bom Dia a Todos!

      Qual a sintaxe correta para a contrução de uma function no oracle?

      Ex.:

      Create Function masc_contab ( string_campo in varchar2(40) )
      Returns Varchar2(40)
      Begin
      if length.campo = 10 then
      Select String_Campo = Left(String_Campo,1) + ‘.’ + Substring(String_Campo,2,1) + ‘.’ + Substring(String_Campo,3,1) + ‘.’ +
      Substring(String_Campo,4,2) + ‘.’ + Substring(String_Campo,6,2) + ‘.’ + Substring(String_Campo,8,2)
      Return String_Campo
      End

      Essa funcao dado string 1234567890 convert para 1.2.34.56.78.90. Porem estou patinando na sintaxe…

      [b]

      Obrigado pela Atenção[/b]

      #78557
      chduarte
      Participante

        Tente assim:

        Create or replace Function masc_contab ( string_campo in varchar2 ) Return Varchar2 as
        v_result varchar2(1000);
        Begin
        if length(string_campo) = 10 then
        v_result := substr(String_Campo,1,1) + ‘.’ + substr(String_Campo,2,1) + ‘.’ + substr(String_Campo,3,1) + ‘.’ +
        substr(String_Campo,4,2) + ‘.’ + substr(String_Campo,6,2) + ‘.’ + substr(String_Campo,8,2);
        End if;
        Return v_result;
        end;

        []

        #78558
        wesleyNet
        Participante

          [quote=”chduarte”:28g3l92k]Tente assim:

          Create or replace Function masc_contab ( string_campo in varchar2 ) Return Varchar2 as
          v_result varchar2(1000);
          Begin
          if length(string_campo) = 10 then
          v_result := substr(String_Campo,1,1) + ‘.’ + substr(String_Campo,2,1) + ‘.’ + substr(String_Campo,3,1) + ‘.’ +
          substr(String_Campo,4,2) + ‘.’ + substr(String_Campo,6,2) + ‘.’ + substr(String_Campo,8,2);
          End if;
          Return v_result;
          end;

          [][/quote]

          ====

          Carlos, decupe-me o imcomodo mas dá um erro dizendo que a conversão do caracter para número…

          SQL> Create or replace Function masc_contab ( string_campo in varchar2 ) Return Varchar2 as
          2 v_result varchar2(32767);
          3 Begin
          4 if length(string_campo) = 10 then
          5 v_result := substr(String_Campo,1,1) + ‘.’ + substr(String_Campo,2,1) + ‘.’ + substr(String_Campo,3,1) + ‘.’ +
          6 substr(String_Campo,4,2) + ‘.’ + substr(String_Campo,6,2) + ‘.’ + substr(String_Campo,8,2);
          7 End if;
          8 Return v_result;
          9 end;
          10 /

          Function created.

          SQL> insert into rm.tab_teste(nome) values(masc_contab(‘1234567890’));
          insert into rm.tab_teste(nome) values(masc_contab(‘1234567890’))
          *
          ERROR at line 1:
          ORA-06502: PL/SQL: numeric or value error: character to number conversion error
          ORA-06512: at “RM.MASC_CONTAB”, line 5

          SQL> desc tab_teste;
          Name Null? Type


          NOME NOT NULL VARCHAR2(35)

          Não entendi.
          Muito Obrigado!

          #78559
          wesleyNet
          Participante

            [quote=”chduarte”:17sowozg]Tente assim:

            Create or replace Function masc_contab ( string_campo in varchar2 ) Return Varchar2 as
            v_result varchar2(1000);
            Begin
            if length(string_campo) = 10 then
            v_result := substr(String_Campo,1,1) + ‘.’ + substr(String_Campo,2,1) + ‘.’ + substr(String_Campo,3,1) + ‘.’ +
            substr(String_Campo,4,2) + ‘.’ + substr(String_Campo,6,2) + ‘.’ + substr(String_Campo,8,2);
            End if;
            Return v_result;
            end;

            [][/quote]

            Deu CErto!

            Muito obrigado!
            [],s

            Create or replace Function masc_contab ( string_campo in varchar2 ) Return Varchar2 is
            v_result varchar2(35);
            Begin
            if length(string_campo) = 10 then
            v_result := substr(String_Campo,1,1) || ‘.’ || substr(String_Campo,2,1) || ‘.’ || substr(String_Campo,3,1) || ‘.’ ||
            substr(String_Campo,4,2) || ‘.’ || substr(String_Campo,6,2) || ‘.’ || substr(String_Campo,8,2);
            else
            v_result :=’NADA’;
            End if;
            Return (v_result);
            end;

            #78560
            itiburski
            Participante

              wesleyNet,

              O operador de concatenação de strings no Oracle é || (dois pipes) e não +. Troque os + por || que vai funcionar.

              #78562
              wesleyNet
              Participante

                [quote=”itiburski”:2gemujva]wesleyNet,

                O operador de concatenação de strings no Oracle é || (dois pipes) e não +. Troque os + por || que vai funcionar.[/quote]

                Obrigado 😀

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