将 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 数据插入不同的表列的主要内容,如果未能解决你的问题,请参考以下文章