我陷入了需要通過從DB2中的文件系統讀取文件(Windows 7上的DB2 Express C)將數據插入到blob列的情況。使用SQL查詢在DB2中插入BLOB數據
在互聯網上的某個地方,我發現這INSERT INTO ... VALUES (..., readfile('filename'), ...);
但這裏readfile不是內置功能,但我需要使用UDF(c語言庫)創建它,但這可能不是一個有用的解決方案。
有人可以更新我們如何使用插入命令插入BLOB值。
我陷入了需要通過從DB2中的文件系統讀取文件(Windows 7上的DB2 Express C)將數據插入到blob列的情況。使用SQL查詢在DB2中插入BLOB數據
在互聯網上的某個地方,我發現這INSERT INTO ... VALUES (..., readfile('filename'), ...);
但這裏readfile不是內置功能,但我需要使用UDF(c語言庫)創建它,但這可能不是一個有用的解決方案。
有人可以更新我們如何使用插入命令插入BLOB值。
1)您可以通過ADMIN_CMD使用LOAD或IMPORT。通過這種方式,您可以使用SQL來調用將調用該工具的管理存儲過程。導入或加載可以讀取文件,然後將其放入一行。
您也可以通過使用臨時表來包裝此進程,該表將從文件中讀取二進制數據,將其插入臨時表中,然後將其從表中返回。
2)您可以創建一個外部存儲過程或用Java或C實現的UDF,它將讀取數據,然後將其插入行中。
你可以檢查這個頁面的LOAD:http://bytes.com/topic/db2/answers/657264-how-simply-insert-update-blob-column-using-data-file – AngocA
謝謝@AngocA。我會盡力做到這一點,並將結果更新 –
我沒有試過,但你還可以使用內置的模塊處理的LOB http://www-01.ibm.com/support/knowledgecenter/SSEPGG_10.5.0/com.ibm.db2.luw.apdv.sqlpl.doc/doc/r0055115.html
這僅僅是在DB2 LUW可用,因爲版本9.7
將嘗試和更新您的結果 –
創建表TABLE_NAME(列BLOB)/ * BLOB是數據類型
插入到表名(列)值(BLOB( 'C:\數據\ winter.jpg'))
C:\ DATA \其路徑和winter.jpg它是一個形象的名字
這節省了文件路徑的字節表示,至少在Windows 7上的db2 10.5。 – Anton
我已經成功通過使用IBM Data Studio與下面的查詢做到這一點:
INSERT INTO MY_TABLE (BLOB_COLUMN) values (?);
,並選擇一個文件從彈出對話框。
不知何故,從RAD 8的相同方法不顯示加載blob列類型的選項相同的方式。
好的,謝謝我會嘗試在數據工作室並會更新 –
首先,根據IBM docs除了在表中定義的LOB列之外,DB2中的所有LOB數據還必須具有以下相應項目。請參閱文檔CREATE
聲明。
一旦這個架構製備然後可以運行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"
平臺和DB2的版本? – Charles
Windows 7上的DB2 Express C –
有趣的是,DB2 for i 7.1具有GET_BLOB_FROM_FILE()函數。但是,對於LUW 10.5而言,DB2似乎沒有。 – Charles