Проблема при вставке данных из .CSV в Oracle - PullRequest
0 голосов
/ 05 июля 2019

Я новичок в 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 и увеличиваться для каждых следующих данных.

...