Sei sulla pagina 1di 3

create or replace function f_valuta (cifra NUMBER, valuta VARCHAR2) return varch ar2 IS err_valuta exception; pragma exception_init(err_valuta,-20666);

v_cifra varchar2(30); v_conta3 varchar(30); v_virgola varchar(30):=' '; cont varchar(2) := 1; cont2 varchar(2); flag boolean; begin if valuta in ('e','E','usd','USD') then v_conta3 := instr(cifra,',') -1; -- ricerca la posizione della virg ola decimale -1 per sapere la lunghezza della parte intera v_cifra := round(cifra,2); -- arrotondamento a 2 cifre v_cifra := replace(v_cifra,',','.'); -- rimpiazza la virgola dei decimal i con il punto cont2 := v_conta3; if v_conta3 > 3 then -- se la parte intera e' > 3 flag := true; for i in 2..(v_conta3 + trunc(v_conta3/3)+1) loop -- i da 2 fino a part e intera + numero di virgole da inserire if cont = 4 then cont := '0'; v_virgola := lpad(v_virgola,i,','); cont2 := cont2 + 1; else v_virgola := lpad(v_virgola,i,substr(v_cifra,cont2,1)); end if;

cont := cont + 1; cont2 := cont2 - 1; end loop; else flag := false; v_conta3 := length(cifra); -- ricerca la posizione della virgola de cimale -1 per sapere la lunghezza della parte intera v_cifra := cifra; -- arrotondamento a 2 cifre cont2 := v_conta3; for i in 2..(v_conta3 + trunc(v_conta3/3)+1) loop e intera + numero di virgole da inserire if cont = 4 then cont := '0'; v_virgola := lpad(v_virgola,i,','); cont2 := cont2 + 1; else v_virgola := lpad(v_virgola,i,substr(v_cifra,cont2,1)); -- i da 2 fino a part

end if; cont := cont + 1; cont2 := cont2 - 1; end loop;

end if; else raise_application_error(-20666,'Valuta in input, '||valuta||' non suppor tata dalla funzione f_valuta(NUMBER,VARCHAR2)'); end if; --exception -- when err_valuta then -- dbms_output.put_line(sqlerrm); v_virgola := trim(v_virgola); if substr(v_virgola,1,1) = ',' then v_virgola := substr(v_virgola,2); end if; if flag = true then return rpad(v_virgola,length(v_virgola)+3,substr(v_cifra,instr(v_cifra,'.'))); else return rpad(v_virgola,length(v_virgola)+3,'.00'); end if; END f_valuta; / declare var varchar2(30); begin var := hr.f_valuta(1000000.005,'e'); dbms_output.put_line(var); end; / declare var number(16,4) := 1111116.3333; begin dbms_output.put_line(RPAD('aaa',4, '0')); end; / declare contr varchar2(30):=' '; begin for i in 1..5 loop dbms_output.put_line(contr); contr := lpad(contr,i,i); --contr := substr('z',3,1); --dbms_output.put_line(contr); end loop;

dbms_output.put_line(contr); contr := ' '; end; / declare cifra varchar2(30):= 1111111.1111; v_cifra varchar2(10); v_conta3 varchar(10); --v_virgola varchar(10):=' '; begin v_conta3 := instr(cifra,',') -1; -- ricerca la posizione della virg ola decimale -1 per sapere la lunghezza della parte intera v_cifra := round(cifra,2); v_cifra := replace(v_cifra,',','.'); dbms_output.put_line('v_conta3 = '||v_conta3||' v_cifra = '||v_cifra|| ' v_conta3/3 = '|| trunc(v_conta3/3)); end; /

Potrebbero piacerti anche