将数据从.CSV插入Oracle时出现问题

时间:2019-07-05 10:51:27

标签: oracle plsql oracleforms

我是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,并随下一个数据的增加而增加。

0 个答案:

没有答案