如何在 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

如何将数据从单个 csv/excel 文件传输到多个 oracle 表

Oracle:如何 UPSERT(更新或插入表?)

java读取csv写入数据库

如何使用 codeigniter 导入 CSV 文件并将数据插入到多个表中?