在单行(单元格)中将数据加载到 db2

load data to db2 in a single row (cell)

我需要将整个文件(仅包含 ASCII 文本)加载到数据库(DB2 Express 版)。 table 只有两列(ID、TEXT)。 ID 列是 PK,有自动生成的数据,而文本是 CLOB(5): 我不知道输入参数 5,它是 Data Studio 默认输入的。

现在我需要使用加载实用程序将文本文件(包含 5 MB 的数据)保存在一行中,即在列 TEXT 中。我不希望文本被分成不同的行。

提前感谢您的回答!

首先,您可能想要重新定义您的 table:CLOB(5) 意味着您希望列中有 5 个字节,这对于 5 MB 的文件来说是不够的。之后,您可以使用带有 lobsinfile 修饰符的 DB2 IMPORTLOAD 命令。

创建一个文本文件并为每个要导入的文件放置 LOB 位置说明符 (LLS),每行一个。

LLS is a way to tell IMPORT where to find LOB data. It has this format: <file path>[.<offset>.<length>/], e.g. /tmp/lobsource.dta.0.100/ to indicate that the first 100 bytes of the file /tmp/lobsource.dta should be loaded into the particular LOB column. Notice also the trailing slash. If you want to import the entire file, skip the offset and length part. LLSes are placed in the input file instead of the actual data for each row and LOB column.

因此,例如:

echo "/home/you/yourfile.txt" > /tmp/import.dat

既然你说 ID 将在输入数据中生成,你不​​需要在输入文件中输入它们,只是不要忘记使用适当的命令修饰符:identitymissinggeneratedmissing,取决于 ID 列的定义方式。

现在您可以连接到数据库和 运行 IMPORT 命令,例如

db2 "import from /tmp/import.dat of del 
     modified by lobsinfile identitymissing
     method p (1) 
     insert into yourtable (yourclobcolumn)"

为了便于阅读,我将命令分成多行,但您应该在一行中键入。

method p (1) means parse the input file and read the column in position 1.

More info in the manual