如何在 oracle 数据库表中插入 csv 或 .txt 文件的日期列?
Posted
技术标签:
【中文标题】如何在 oracle 数据库表中插入 csv 或 .txt 文件的日期列?【英文标题】:how to insert date column of csv or .txt file in oracle database table? 【发布时间】:2018-07-19 09:11:18 【问题描述】:如果我在表格中添加日期列并在我的文件中提供日期,则此命令已成功运行,但不知道如何在日期列中插入日期。有什么建议吗?
DECLARE
F UTL_FILE.FILE_TYPE;
V_LINE VARCHAR2 (1000);
V_EMPNO NUMBER(4);
V_ENAME VARCHAR2(10);
V_JOB VARCHAR2(10);
V_MGR VARCHAR2(4);
V_SAL NUMBER(6);
V_COMM NUMBER(6);
V_DEPTNO NUMBER(2);
BEGIN
F := UTL_FILE.FOPEN ('TEMP', 'empup.txt', 'R');
IF UTL_FILE.IS_OPEN(F) THEN
LOOP
BEGIN
UTL_FILE.GET_LINE(F, V_LINE, 1000);
IF V_LINE IS NULL THEN
EXIT;
END IF;
V_EMPNO := REGEXP_SUBSTR(V_LINE, '[^,]+', 1, 1);
V_ENAME := REGEXP_SUBSTR(V_LINE, '[^,]+', 1, 2);
V_JOB := REGEXP_SUBSTR(V_LINE, '[^,]+', 1, 3);
V_MGR := REGEXP_SUBSTR(V_LINE, '[^,]+', 1, 4);
V_SAL := REGEXP_SUBSTR(V_LINE, '[^,]+', 1, 5);
V_COMM := REGEXP_SUBSTR(V_LINE, '[^,]+', 1, 6);
V_DEPTNO := REGEXP_SUBSTR(V_LINE, '[^,]+', 1, 7);
INSERT INTO demp VALUES(V_EMPNO, V_ENAME, V_JOB, V_MGR, V_SAL, V_COMM, V_DEPTNO);
COMMIT;
EXCEPTION
WHEN NO_DATA_FOUND THEN
EXIT;
END;
END LOOP;
END IF;
UTL_FILE.FCLOSE(F);
END;
【问题讨论】:
像其他数据类型一样从行中提取数据字段,并使用 TO_DATE('string','format') 将该字符串转换为日期格式,这肯定会起作用。 【参考方案1】:您需要知道 CSV 文件中日期的格式;假设日期格式为yyyy-mm-dd
,您需要类似:
declare
V_yourDate date;
...
begin
...
V_yourDate := to_date( REGEXP_SUBSTR(V_LINE, '[^,]+', 1, 8), 'yyyy-mm-dd');
INSERT INTO demp VALUES(V_EMPNO, V_ENAME, V_JOB, V_MGR, V_SAL, V_COMM, V_DEPTNO, v_yourDate);
...
end;
编写insert
的更好方法是使用显式列:
insert into table(col1, col2, ...) values (val1, val2, ...)
【讨论】:
它的工作...但是如果文件中的所有列不像 oracle 数据库表中那样串联怎么办? 如果 ename 列数据有空格怎么办:Dinesh Mayal 空格和其他字符一样是一个字符以上是关于如何在 oracle 数据库表中插入 csv 或 .txt 文件的日期列?的主要内容,如果未能解决你的问题,请参考以下文章
使用python将数据从csv文件插入oracle时出现错误ORA-01722:无效数字
如何将 Excel 工作表中的行插入 SQL Server 2005 或 oracle