将Clob数据插入不同的表列

时间:2018-10-11 08:31:50

标签: plsql oracle-sqldeveloper oracle-apex oracle12c

我有一个名为“ 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。

感谢您的帮助!

1 个答案:

答案 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;