nota all'esempio 5
----- fn_trasc ('da-mvs') segnala l'errore
nella funzione
create or replace function fn_comp3(x number , ncifre smallint, autoconv char default 's') return varchar2 is
y varchar2(30);
xs varchar2(30);
s varchar2(30);
l smallint;
ndec smallint;
segno char;
xcifre smallint :=ncifre;
begin
if xcifre mod 2 =0 then
xcifre := xcifre+1;
end if;
xs := ltrim(to_char( nvl(x,0) , rpad('0',xcifre,'9'))) ;
----- nel caso di numeri che non rientrano nel numero di cifre specificato, xs risulta '##..##' , la fn_hex2dec ritorna quindi null e la
----- fn_trasc ('da-mvs') segnala l'errore
l:= length(xs) ;
if x<0 then segno :='D';
else segno :='C';
end if;
while l>0 loop
s:= substr (xs,l);
xs:= substr (xs,1,l-1);
if length(s)=1 then
s:=s|| segno ;
end if;
ndec:=fn_hex2dec (s) ;
if ndec = 0 then
ndec :=204; ------- necessario * probl con chr(0) = fine stringa
end if;
y := chr(ndec ) || y ;
l:=l-2;
end loop;
if autoconv='s' then
y:= fn_trasc(y, 'da-mvs');
end if;
return y;
--------- y := hextoraw( x||'C'); ma non funziona..
end;
/
per ottenere gli errori "veri":
errori:
| NAME | TYPE | SEQUENCE | LINE | POSITION | TEXT |
|---|---|---|---|---|---|
| FN_COMP3 | FUNCTION | 1. | 43. | 12. | PLS-00201: identifier 'FN_TRASC' must be declared |
| FN_COMP3 | FUNCTION | 2. | 43. | 8. | PL/SQL: Statement ignored |
select line , text, rawtohex (text) from user_source where name ='FN_COMP3'ritorna per la riga 19 (quella contenete un apice "spaiato") il valore hextoraw