我有一个名为“ uploaded_files”的表,该表存储* csv.files,这些文件由用户在我的Web应用程序中通过dropzone(https://github.com/Dani3lSun/apex-plugin-dropzone)上传。该文件的内容存储在数据类型为blob的表列中。
要插入文件内容,我正在使用名为'csv_util_pkg'(https://github.com/mortenbra/alexandria-plsql-utils)的软件包。我设法将blob数据类型转换为clob数据类型,并将clob数据存储到另一个名为x_dump的表中。 X_Dump Table如您在图片中所见,clob_values被分隔并存储在'c001'和'c002'中。这是通过csv_util_pkg的功能完成的。
现在,我想获取这两个值并将它们存储在名为“ fahrzeug”的表中,但这不起作用,我真的不知道为什么。我收到以下错误代码
ORA-01400: Einfügen von NULL in ("RESSOURCE_U"."FAHRZEUG"."VNUMMER") nicht möglich
ORA-06512: in Zeile 14
01400. 00000 - "cannot insert NULL into (%s)"
*Cause: An attempt was made to insert NULL into previously listed objects.
*Action: These objects cannot accept NULL values.
这是我的代码:
DECLARE
file_content NUMBER (10);
l_clob CLOB;
BEGIN
SELECT TO_CLOB (
UTL_RAW.CAST_TO_VARCHAR2 (DBMS_LOB.SUBSTR (FILE_BLOB, 2000)))
INTO l_clob
FROM UPLOADED_FILES
WHERE UPLOADED_FILES.FILENAME LIKE 'A_%_Fahrzeug.csv';
INSERT INTO X_DUMP (CLOB_VALUE, DUMP_ID)
VALUES (l_clob, 1);
INSERT INTO fahrzeug (vnummer, baureihe)
SELECT c001, c002
FROM x_dump d, TABLE (csv_util_pkg.clob_to_csv (d.clob_value, ';'));
COMMIT;
END;
vnummer是表'fahrzeug'的主键,因此我们不能插入null。但是我不明白,因为c001和c002包含值,所以它不能为null。
感谢您的帮助!
答案 0 :(得分:0)
您是否在运行时调试或输出了c001?试试这个:
for tmp IN (select c001 from x_dump d, table(csv_util_pkg.clob_to_csv(d.clob_value, ';')))
LOOP
DBMS_OUTPUT.put_line ('vnummer: ' || tmp.c001);
END LOOP;