我是PL / SQL Oracle的新手,我正在尝试将数据从.CSV插入数据库。我收到消息,指出已插入数据,但是在检查数据库后,我注意到没有将数据插入数据库。
到目前为止,我尝试在insert语句中手动插入数据,这是可行的 但是在我更改它以从.CVS插入真实数据后,它不起作用。
declare
import_file text_io.file_type;
export_file text_io.file_type;
import_file_name varchar2(1000);
export_file_name varchar2(1000);
import_log_file text_io.file_type;
import_log_file_name varchar2(1000);
vec_importovano number;
brojac number;
brojac_redova number;
linebuf varchar2(10000);
p_rbr varchar2(20);
p_polica varchar2(20);
p_banka VARCHAR2(50);
p_kontakt varchar2(20);
kraj_fajla number;
begin
brojac_redova:=0;
import_file_name := :Global.Lokacija_prenosa||:import.naziv_fajla||:Global.Ekstenzija_prenosa;
import_file := text_io.fopen(import_file_name,'r');
-- delete from zivot_trajni_nalog_ponude where banka is not null;
--commit;
kraj_fajla := 0;
while kraj_fajla = 0 loop
begin
brojac_redova:=brojac_redova+1;
text_io.get_line(import_file, linebuf);
if brojac_redova >= 2 then
p_polica:=substr(linebuf, 1, instr(linebuf,';',1,1)-1);
--message(p_polica);
p_kontakt:=substr(linebuf, instr(linebuf,';',1,1)+1, instr(linebuf,';',1,2) - instr(linebuf,';',1,1)-1);
--message(p_kontakt);
/*if it has third semicolon then use your formula, string between 2 and 3. If it has only two semicolons then use from second to the end of string*/
if instr(linebuf,';',1,3) > 0 then
p_banka := substr(linebuf,
instr(linebuf,';',1, 2) + 1,
instr(linebuf,';',1,3) - instr(linebuf,';',1,2)-1);
-- message(p_banka);
else
p_banka := substr(linebuf,
instr(linebuf,';',1, 2) + 1);
--message(p_banka);
end if;
select count(*)
into vec_importovano
from ZIVOT_TRAJNI_NALOG_PONUDE
where BROJ_POLICE=p_polica; -- and REDNI_BROJ = p_rbr;
if vec_importovano = 0 then
insert into ZIVOT_TRAJNI_NALOG_PONUDE values(p_polica,p_rbr, p_kontakt,p_banka);
-- insert into ZIVOT_TRAJNI_NALOG_PONUDE values('000003','654321', '107459','NLB');
-- insert into ZIVOT_TRAJNI_NALOG_PONUDE values('000009','123987', '107456','NLB');
/*
insert into ZIVOT_TRAJNI_NALOG_PONUDE(BROJ_POLICE,REDNI_BROJ, BROJ_PONUDE,BANKA) values(
'000000',
'3125478',
'107575',
'NLB'
);
*/
commit;
end if;
end if;
EXCEPTION WHEN NO_DATA_FOUND THEN kraj_fajla := 1;
end;
end loop;
-- message('Izasao iz petlje');
IF p_polica IS NOT NULL
THEN
update ZIVOT_TRAJNI_NALOG_PONUDE set REDNI_BROJ=rownum;
-- commit;
end if;
text_io.fclose(import_file);
message('Zavrseno prepisivanje fajla');
--set_alert_property('NOTE_ALERT',alert_message_text, 'Zavrseno prepisivanje fajla '||import_file_name);
end;
这是我的数据库:
BROJ_POLICE REDNI_BROJ BROJ_PONUDE BANKA
123456 100000 107879 SBS
123478 100001 108745 KLI
123558 100002 107880 NUZ
这是我的.CSV文件
Broj police; Kontakt; Agencija
4554458; 107126562; NLB
4554998; 107126380; NLB
4554999; 107127654; NLB
插入后应该是这样的
BROJ_POLICE REDNI_BROJ BROJ_PONUDE BANKA
123456 100000 107879 SBS
123478 100001 108745 KLI
123558 100002 107880 NUZ
4554458; 100003; 107126562 NLB
4554998; 100004; 107126380; NLB
4554999; 100005; 107127654; NLB
我认为问题出在INSERT
声明之后。
如果有人可以帮助我,我将非常感激。
干杯! !
更新: REDNI_BROJ的初始值应为100001,并随下一个数据的增加而增加。