将 clob 数据插入不同的表列

Posted

技术标签:

【中文标题】将 clob 数据插入不同的表列【英文标题】:Inserting clob-data into different table-columns 【发布时间】:2018-10-11 08:31:50 【问题描述】:

我有一个名为“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-datatype 转换为 clob-datatype 并将 clob-data 存储到另一个名为 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 包含值,所以它不能为空..

感谢您的帮助!

【问题讨论】:

【参考方案1】:

您是否在运行时调试或输出了 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;

【讨论】:

感谢您的回复。不幸的是,您的命令未编译,我收到错误代码。但我发现如下: 'fahrzeug' 上的插入语句通常是有效的,因为它插入了我的 x_dump 表的第一行(c001 在那里不为空)。然后当 oracle 尝试插入我的表的第二行时出现问题,因为第二行中的 'c001' 为 NULL。 这对我来说有点令人困惑,因为有两个事实:1)我在 x_dump 表上只有一个插入语句,那么为什么 x_dump 包含两行?它应该只包含一行,因为没有循环或其他东西。 2) 当 Oracle 尝试插入“fahrzeug”时,我不明白类似的问题。只有一个命令,没有循环,所以应该只有一个插入到fahrzeug,那么为什么oracle要插入两次呢? 我修改了输出-sn-p。我不知道您的 x_dump-Table 或 table(csv..) 中有什么,但您没有加入它们。这是正确的吗? 创建表x_dump(clob_value clob, dump_date date 默认sysdate, dump_id number);这就是我的表的创建方式。你是对的,我不加入表。

以上是关于将 clob 数据插入不同的表列的主要内容,如果未能解决你的问题,请参考以下文章

Python数据框值插入到数据库表列

使用 Azure SQL 将不同的表列合并为一个

oracle 10G数据库如何插入clob字段的值的简单语句sql语句

数据库表列行

决定何时在数据库中的表列上创建索引?

如何在 MySQL 数据库中插入文件?