КОГДА-КНОПКА нажимается триггер необработанное исключение ORA-01400 - PullRequest
1 голос
/ 08 июля 2019

Я пытаюсь импортировать данные из файла .CSV в базу данных Oracle.После запуска я получаю сообщение об ошибке

WHEN-BUTTON-PRESSED trigger raise unhandled exception ORA-01400

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(5000);

   p_rbr varchar2(10);
   p_polica varchar2(10);
   p_banka VARCHAR2(10);
   p_kontakt varchar2(10);

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

/*
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;  


        insert into ZIVOT_TRAJNI_NALOG_PONUDE 
        (BROJ_POLICE,REDNI_BROJ,BROJ_PONUDE,BANKA)  
         values(
         p_polica,p_rbr,p_kontakt,p_banka);     
            commit;                   
                end if;



     EXCEPTION WHEN NO_DATA_FOUND THEN kraj_fajla := 1;         
     end;

end loop;  
     IF p_rbr IS NOT NULL THEN
   update zivot_trajni_nalog_ponude set redni_broj=rownum;
    end if;         
    text_io.fclose(import_file);
      message('Zavrseno prepisivanje fajla');

end;

Прежде чем вставить данные в таблицу, я пытаюсь проверить, имеет ли значение p_polica значение NULL, но это не работает.Поскольку в моей IDE нет отладчика, я не смог проверить, откуда возникла ошибка.Кто-нибудь знает, где может быть ошибка, я был бы очень благодарен

1 Ответ

0 голосов
/ 08 июля 2019

Описание для ORA-01400: «невозможно вставить NULL в (строку)».Вы не дали нам полный текст сообщения об ошибке, поэтому я не знаю, что может быть (string), но это, вероятно, имя таблицы и имя поля - знайте, какая таблица и поле могут быть здесь важны.Я подозреваю, что в таблице ZIVOT_TRAJNI_NALOG_PONUDE есть поле, которое не допускает значений NULL, и что вы не заполняете его в инструкции INSERT или для которого вы предоставляете значение NULL.Например, вы вводите значение p_rbr в ZIVOT_TRAJNI_NALOG_PONUDE.REDNI_BROJ, но p_rbr никогда не присваивается значение, и поэтому оно равно NULL.Если ZIVOT_TRAJNI_NALOG_PONUDE.REDNI_BROJ имеет ограничение NOT NULL, вы получите эту ошибку.

Удачи.

...