-1

此命令成功运行,但如果我在表中添加日期列并在我的文件中提供日期,则不知道如何在日期列中插入日期。有什么建议吗?

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

1 回答 1

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, ...)
于 2018-07-19T09:20:04.937 回答