【发布时间】:2020-09-21 05:27:21
【问题描述】:
我有一个 csv 文件,我想将它加载到 oracle apex 中,当我点击提交时,它必须通读 csv 文件并返回 csv 中包含 null 的所有行。
所以我有一个表名 csvtest,它有字段 id、name 和 age。 当我使用带有这些字段的文件浏览器将 csv 文件上传到 oracle apex 时,我想通读它并使用 plsql 在 AGE 列中找到所有具有 NULL 的行,如果它们不包含 null 然后返回它们成功上传文件
这是我目前的代码,我没有任何方式阅读专栏
DECLARE
F_FILE UTL_FILE.FILE_TYPE;
V_LINE VARCHAR2 (1000);
V_ID NUMBER(10);
V_NAME VARCHAR2(70);
V_AGE NUMBER(2);
BEGIN
F_FILE := UTL_FILE.FOPEN ('TEMP.CSV', 'R', 32767);
IF UTL_FILE.IS_OPEN(F_FILE) THEN
LOOP
BEGIN
UTL_FILE.GET_LINE(F_FILE, V_LINE, 32767);
IF V_LINE IS NULL THEN
EXIT;
END IF;
V_ID := REGEXP_SUBSTR(V_LINE, '[^,]+', 1, 1);
V_NAME := REGEXP_SUBSTR(V_LINE, '[^,]+', 1, 2);
V_AGE := REGEXP_SUBSTR(V_LINE, '[^,]+', 1, 3);
INSERT INTO EMP_DEPT VALUES(V_ID, V_NAME, V_AGE);
COMMIT;
EXCEPTION
WHEN NO_DATA_FOUND THEN
EXIT;
END;
END LOOP;
END IF;
UTL_FILE.FCLOSE(F_FILE);
END;
/
【问题讨论】:
-
改为使用external table 阅读。那么你可以只做一个 SELECT 而不需要所有这些文件解析的东西。
-
我只是好奇你为什么打开 temp.csv 文件,它是在运行这段代码之前从 APEX_APPLICATION_FILES 构建的吗?
标签: oracle csv plsql oracle-apex oracle19c