[ ljuban @ 27.08.2002. 08:09 ] @
Problem je sledeci. Treba txt fajl da se ucita u bazu linija po linija. Radi se o nekom recniku. Termin je od znacenja razdvojen znakom minus (-). Termin i znacenje su od novog termina i znacenja odvojeni praznom linijom. Treba da se uzme termin i psakuje u jednu kolonu tabele a njegovo znacenje u drugu ("vrlo prosto"). Medjutim tu pocinju da se javljaju problemi. Ne znam da li je neko radio sa DBMS_LOB paketom. Ja sam radio ali ne postoji nacin na koji direktno mozes da ucitac CLOB nego prvo ide BFILE (binarni fajl) a posle treba da pises procedure za konverziju. Evo, koda koji sam ja napisao. Radjeno je sa UTL_FILE paketom i nije bas ispalo kako treba:
Koliko je iznema i verzija ovog bilo ne znam ni da li sam pravi poslao. Ako neko zna sta sadrzi UTL_FILE.GET_LINE(utl_file.file_type, string) kada je string prazna linija. Da li je to null ili "" ili nesto trece probao sam i sa jednim i sa drugim i neca pa to ti je.
Code:

declare
f utl_file.file_type;
a varchar2(100);
b varchar2(100);
otvoren boolean;
kraj boolean;
j number(4):=1;
prazna boolean;
brojac number(3);
termin varchar2(30);
znacenje2 varchar2(1000):='';
pomocni varchar2(2000):='';
pomocni2 varchar2(1000):='';
--duzina number(3);
begin
j:=1;
kraj:=false;
  otvoren:=utl_file.is_open(f);
  if otvoren 
    then
      null;
    else
      f:=utl_file.fopen('D:\Recnik\', 'a.txt', 'R');
  end if;
  
  while not(kraj) loop
  utl_file.get_line(f, a);
      b:=trim(' ' from a);
      
      if b is null
       then
         insert into proba values(j, termin, znacenje2);
         utl_file.get_line(f, a);
         b:=trim(' ' from a);
         termin:=substr(b, 1, instr(b, '-', 1, 1));
         znacenje2:=substr(b, instr(b, '-', 1, 1), length(b));
         j:=j+1;
         insert into proba values(j, termin, znacenje2);
       else
         select znacenje into pomocni from proba where id=j;
         pomocni2:=trim(' ' from pomocni);
         pomocni:=pomocni2||' '||b;
         delete from proba where id=j;
         insert into proba values (j, termin, pomocni);
       end if;
  end loop;
exception
when no_data_found then
kraj:=true;
utl_file.fclose(f);
end;

Ako ce vam biti od pomoci, evo, vam jos jedne procedure koja samo pronalazi linije u kojima ima termina i stavlja ih u jednu kolonu tabele a deo znacenja u drugu, znaci to radi e sada preko toga treba da se uzme sledeca linija da se izvrsi konkatenacija do celog znacenja. Nadam se da sam bio jasan a izvinjavam se na ovolikoj duzini poruke.
Code:

declare
f utl_file.file_type;
a varchar2(100);
b varchar2(100);
otvoren boolean;
kraj boolean;
j number(4);
prazna boolean;
brojac number(3);
begin
j:=1;
kraj:=false;
  otvoren:=utl_file.is_open(f);
  if otvoren 
    then
      null;
    else
      f:=utl_file.fopen('D:\Recnik\', 'a.txt', 'R');
  end if;
  
  while not(kraj) loop
  utl_file.get_line(f, a);
      b:=trim(' ' from a);
      
      if b is null
       then
         utl_file.get_line(f, a);
         b:=trim(' ' from a);
         insert into tekst values(j, b);
         b:=null;
         j:=j+1;
       else
         insert into tekst values(j, b);
         b:=null;
         j:=j+1;
         --prazna:=false;
      end if;
  end loop;
exception
when no_data_found then
kraj:=true;
utl_file.fclose(f);
end;
[ ljuban @ 30.08.2002. 13:50 ] @
Problem resen.