2015-06-30 227 views
0

我陷入了需要通過從DB2中的文件系統讀取文件(Windows 7上的DB2 Express C)將數據插入到blob列的情況。使用SQL查詢在DB2中插入BLOB數據

在互聯網上的某個地方,我發現這INSERT INTO ... VALUES (..., readfile('filename'), ...);但這裏readfile不是內置功能,但我需要使用UDF(c語言庫)創建它,但這可能不是一個有用的解決方案。

有人可以更新我們如何使用插入命令插入BLOB值。

+0

平臺和DB2的版本? – Charles

+0

Windows 7上的DB2 Express C –

+0

有趣的是,DB2 for i 7.1具有GET_BLOB_FROM_FILE()函數。但是,對於LUW 10.5而言,DB2似乎沒有。 – Charles

回答

0

1)您可以通過ADMIN_CMD使用LOADIMPORT。通過這種方式,您可以使用SQL來調用將調用該工具的管理存儲過程。導入或加載可以讀取文件,然後將其放入一行。

您也可以通過使用臨時表來包裝此進程,該表將從文件中讀取二進制數據,將其插入臨時表中,然後將其從表中返回。

2)您可以創建一個外部存儲過程或用Java或C實現的UDF,它將讀取數據,然後將其插入行中。

+0

你可以檢查這個頁面的LOAD:http://bytes.com/topic/db2/answers/657264-how-simply-insert-update-blob-column-using-data-file – AngocA

+0

謝謝@AngocA。我會盡力做到這一點,並將結果更新 –

-3

DB2 SQL查詢插入JPG文件到表

創建表TABLE_NAME(列BLOB)/ * BLOB是數據類型

插入到表名(列)值(BLOB( 'C:\數據\ winter.jpg'))

C:\ DATA \其路徑和winter.jpg它是一個形象的名字

+1

這節省了文件路徑的字節表示,至少在Windows 7上的db2 10.5。 – Anton

0

我已經成功通過使用IBM Data Studio與下面的查詢做到這一點:

INSERT INTO MY_TABLE (BLOB_COLUMN) values (?); 

,並選擇一個文件從彈出對話框。

不知何故,從RAD 8的相同方法不顯示加載blob列類型的選項相同的方式。

+0

好的,謝謝我會嘗試在數據工作室並會更新 –

0

首先,根據IBM docs除了在表中定義的LOB列之外,DB2中的所有LOB數據還必須具有以下相應項目。請參閱文檔CREATE聲明。

  1. LOB表(一個用於在每個分區的每個LOB列)
  2. 輔助表上面的表空間指向BLOB列在基表(也,一個用於每個分區中的每個LOB列)
  3. 在輔助表唯一索引

一旦這個架構製備然後可以運行LOAD命令可以與其他數據字段WH導入文件路徑引用blob內容。下面是具有僱員演示表:

DB表(例如表)

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"