我試圖從CSV文件導入上面的表格到預先定義的表在Oracle數據庫。以下是導入上表的代碼(pl sql代碼)。
代碼:
Drop table emp_tbl
create table emp_tbl
(EmpNo Number,
EName varchar2(15),
Job Varchar2(15),
MGR Varchar2(30),
HireDate Date,
Sal Number
);
create or replace procedure read_file_proc
Is
f_line varchar2(2000);
f utl_file.file_type ;
f_dir varchar2(250);
fname varchar2(50);
comma1 Number;
comma2 Number;
comma3 Number;
comma4 Number;
comma5 Number;
f_empno emp_tbl.empno%type;
f_ename emp_tbl.ename%type;
f_job emp_tbl.job%type;
f_mgr emp_tbl.MGR%type;
f_hiredate emp_tbl.hiredate%type;
f_sal emp_tbl.sal%type;
Begin
dbms_output.put_line('At Begin');
fname := 'Emp_tbl.csv';
f := utl_file.fopen('UTL_FILE_DIR', fname, 'R');
dbms_output.put_line('Before loop');
loop
Begin
Utl_file.get_line(f, f_line);
--dbms_output.put_line(f_line);
exception
when no_data_found then
exit;
end;
comma1 := instr(f_line,',', 1, 1);
comma2 := instr(f_line,',', 1, 2);
comma3 := instr(f_line,',', 1, 3);
comma4 := instr(f_line,',', 1, 4);
comma5 := instr(f_line,',', 1, 5);
f_empno := to_number(substr(f_line, 1, comma1 -1));
f_ename := substr(f_line, comma1 + 1, comma2 - comma1 - 1);
f_job := substr(f_line, comma2 + 1, comma3 - comma2 - 1);
f_mgr := substr(f_line, comma3 + 1, comma4 - comma3 - 1);
f_hiredate := to_date(substr(f_line, comma4 + 1, comma5 - comma4 - 1), 'dd-mon,-yyyy');
f_sal := to_number(substr(f_line, comma5 + 1));
insert into emp_tbl values(f_empno, f_ename, f_job, f_mgr, f_hiredate, f_sal);
end loop;
utl_file.fclose(f);
--commit;
end read_file_proc;
但是當在SQL顯影劑運行我收到如下錯誤:
ORA-06502: PL/SQL: numeric or value error: character to number conversion error ORA-06512: at "SYSTEM.READ_FILE_PROC", line 36 ORA-06512: at line 2
但是,當我爲f_empno直接輸入值(通過使用插入查詢),f_hiredate, f_salary ...它工作正常。
任何人都可以請告訴我爲什麼我得到上面提到的錯誤。
在此先感謝。
編輯:由於問的第一個行CSV文件顯示爲:
1,Akon,TSP,Navi,01-10-2002,2000
請使用良好的佈局,讓您的代碼更具可讀性。它將在調試時幫助你。例如,查看我的代碼中的更改。 – wieseman
f_empno的結果是一個varchar2(f_empno是唯一的數字變量)。嘗試相同,但通過創建表使用empno作爲varchar2。然後你會看到在插入過程中使用的值。在你使它成爲一個存儲過程之前,不要使用存儲過程運行該過程,並在使用插入語句前檢查這些值(使用dbms_output.put_line) – wieseman
請分享csv文件 –