WHEN-BUTTON-PRESSED 触发器引发未处理的异常 ORA-01400
WHEN-BUTTON-PRESSED trigger raise unhandled exception ORA-01400
我正在尝试将数据从 .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;
在我将数据插入 table 之前,我尝试检查 p_polica 是否为 NULL,但这不起作用。
因为我的 IDE 中没有调试器,所以我无法检查错误的来源。
有谁知道哪里可能出错我将非常感谢
ORA-01400 的描述是 "cannot insert NULL into (string)"。你没有给我们错误消息的全文,所以我不知道 (string)
可能是什么,但它可能是 table 名称和字段名称 - 知道哪个 table 和字段在这里可能很重要。
我怀疑 table ZIVOT_TRAJNI_NALOG_PONUDE
有一个不允许在其中使用 NULL 值的字段,并且您没有在 INSERT 语句中填充或您为其提供的值一片空白。例如,您将 p_rbr
的值放入 ZIVOT_TRAJNI_NALOG_PONUDE.REDNI_BROJ
,但 p_rbr
从未被赋予值,因此为 NULL。如果 ZIVOT_TRAJNI_NALOG_PONUDE.REDNI_BROJ
有一个 NOT NULL 约束,你就会得到那个错误。
我正在尝试将数据从 .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;
在我将数据插入 table 之前,我尝试检查 p_polica 是否为 NULL,但这不起作用。 因为我的 IDE 中没有调试器,所以我无法检查错误的来源。 有谁知道哪里可能出错我将非常感谢
ORA-01400 的描述是 "cannot insert NULL into (string)"。你没有给我们错误消息的全文,所以我不知道 (string)
可能是什么,但它可能是 table 名称和字段名称 - 知道哪个 table 和字段在这里可能很重要。
我怀疑 table ZIVOT_TRAJNI_NALOG_PONUDE
有一个不允许在其中使用 NULL 值的字段,并且您没有在 INSERT 语句中填充或您为其提供的值一片空白。例如,您将 p_rbr
的值放入 ZIVOT_TRAJNI_NALOG_PONUDE.REDNI_BROJ
,但 p_rbr
从未被赋予值,因此为 NULL。如果 ZIVOT_TRAJNI_NALOG_PONUDE.REDNI_BROJ
有一个 NOT NULL 约束,你就会得到那个错误。