- Este tópico contém 5 respostas, 3 vozes e foi atualizado pela última vez 18 anos atrás por wesleyNet.
-
AutorPosts
-
25 de janeiro de 2007 às 3:59 pm #78554wesleyNetParticipante
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
EndEssa funcao dado string 1234567890 convert para 1.2.34.56.78.90. Porem estou patinando na sintaxe…
[b]
Obrigado pela Atenção[/b]
25 de janeiro de 2007 às 4:30 pm #78557chduarteParticipanteTente 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;[]
25 de janeiro de 2007 às 5:02 pm #78558wesleyNetParticipante[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 5SQL> desc tab_teste;
Name Null? Type
NOME NOT NULL VARCHAR2(35)
Não entendi.
Muito Obrigado!25 de janeiro de 2007 às 5:33 pm #78559wesleyNetParticipante[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!
[],sCreate 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;25 de janeiro de 2007 às 5:36 pm #78560itiburskiParticipantewesleyNet,
O operador de concatenação de strings no Oracle é || (dois pipes) e não +. Troque os + por || que vai funcionar.
25 de janeiro de 2007 às 6:48 pm #78562wesleyNetParticipante[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 😀
-
AutorPosts
- Você deve fazer login para responder a este tópico.