[ 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; |