Я новичок в PL / SQL Oracle и пытаюсь вставить данные из .CSV в базу данных. Я получаю сообщение о том, что данные вставлены, но после проверки базы данных я замечаю, что данные не вставляются в базу данных.
Что я сделал до сих пор, я пытаюсь вручную вставить данные в оператор вставки, и это работает
Но после того, как я изменил его, чтобы вставить реальные данные из .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 и увеличиваться для каждых следующих данных.