nota all'esempio 5

è sufficiente aggiungere un apice al commento
  ----- 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:



NAMETYPESEQUENCELINEPOSITIONTEXT
FN_COMP3FUNCTION1.43.12.PLS-00201: identifier 'FN_TRASC' must be declared
FN_COMP3FUNCTION2.43.8.PL/SQL: Statement ignored



notare che il commento conteneva inizialmente un numero dispari di apici;

altra stranezza:
nonostante la creazione della function ritornasse quegli errori (e fosse poi effettivamente invalid), riconpilandola - copiando il sorgente presente sul db - si ottengono quelli "veri":

una select del sorgente dal db:
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
20202D2D2D2D2D20666E5F747261736320282764612D6D76732729207365676E616C61206C276572726F72650D0A
(prima della ricompilazione sopra descritta)

e 20202D2D2D2D2D20666E5F747261736320282764612D6D76732729207365676E616C61206C276572726F72650A
(dopo)
l'unica differenza è la trasformazione del 0D0A finale in 0A;


.. seguiranno eventualmente altri test...