Inserting BLOB data in DB2 using SQL Query

时间:2015-06-30 13:28:33

标签: sql db2 blob sql-insert

I am stuck into a situation where I need to insert data into a blob column by reading a file from the Filesystem in DB2 (DB2 Express C on Windows 7).

Somewhere on the internet I found this INSERT INTO ... VALUES ( ..., readfile('filename'), ...); but here readfile is not an inbuilt function but I need to create it using UDF (c language libraries), but that might not be a useful solution.

Can somebody update us how to insert BLOB values using Insert command.

5 个答案:

答案 0 :(得分:0)

1)您可以通过LOAD使用IMPORTADMIN_CMD。通过这种方式,您可以使用SQL来调用将调用该工具的管理存储过程。导入或加载可以读取文件,然后将其放在一行。

您还可以使用临时表来包装此进程,该表将从文件读取二进制数据,将其插入临时表,然后将其从表中返回。

2)您可以创建一个用Java或C实现的外部存储过程或UDF,它将读取数据,然后将其插入行中。

答案 1 :(得分:0)

我还没试过,但您也可以使用处理LOB的内置模块http://www-01.ibm.com/support/knowledgecenter/SSEPGG_10.5.0/com.ibm.db2.luw.apdv.sqlpl.doc/doc/r0055115.html

仅在版本9.7以后的DB2 LUW中提供

答案 2 :(得分:0)

我已成功通过使用带有以下查询的IBM Data Studio来实现此目的:

INSERT INTO MY_TABLE (BLOB_COLUMN) values (?);

从弹出对话框中选择一个文件。

不知何故,RAD 8中的相同方法没有显示以相同方式加载blob列类型的选项。

答案 3 :(得分:0)

首先,除了IBM docs之外,DB2中的所有LOB数据除了在表中定义的LOB列外,还必须具有以下相应的项。请参阅文档,例如CREATE语句。

  1. LOB表空间(每个分区中每个LOB列一个)
  2. 上表空间中的辅助表,指向基表中的blob列(同样,每个分区中每个LOB列一个)
  3. 辅助表中的唯一索引
  4. 准备好此模式后,您可以运行LOAD命令,该命令可以与其他数据字段一起导入,其中blob内容由文件路径引用。以下是带有 Employees 表的演示:

    数据库表 (示例表)

    CREATE TABLE EMPLOYEES (
       ID INTEGER NOT NULL GENERATED ALWAYS AS IDENTITY,
       EMPLOYEE_NUMBER INTEGER,
       EMPLOYEE_NAME VARCHAR(255),
       EMPLOYEE_PIC BLOB(500K)
    );
    

    CSV文件 (逗号是LOAD中没有标题的默认分隔符)

    1234, "John Doe", johndoe.jpg
    5678, "Jane Doe", janedoe.jpg
    ...
    

    DB2 LOAD (使用其他许多LOAD parameters的默认值的简单版本)

    LOAD FROM "/path/to/file.csv"
      OF DEL
      LOBS FROM /path/to/picture/folder/   --PATH OF BLOB FILES WITH BASENAME IN CSV
                                           --MUST END IN FORWARD SLASH
      MODIFIED BY LOBSINFILE CHARDEL""
      DUMPFILE="/path/to/dump.txt"         --FOR FAILED IMPORTS
      METHOD P (1,2,3)                     --NUMBER REFERENCE OF COLS, OR USE N FOR FIELD NAMES
      MESSAGES "/path/to/messages.txt"     --FOR LOAD COMMAND MESSAGES
      REPLACE INTO "EMPLOYEES"             --REMOVES EXISTING FOR IMPORT, OR USE INSERT TO ADD
      (EMPLOYEE_NUMBER
       EMPLOYEE_NAME,
       EMPLOYEE_PIC);
    

    命令行

    > db2 -tvf "/path/to/load_command.sql"
    
    > db2 "SELECT LENGTH(EMPLOYEE_PIC) FROM EMPLOYEES"
    

答案 4 :(得分:-3)

将SQLG文件插入表

的DB2 SQL查询

create table table_name(column_name BLOB)/ * BLOB是数据类型

插入table_name(column_name)值(blob(' c:\ data \ winter.jpg'))

c:\ data \它是一个路径,winter.jpg是一个图像名称