2013-01-02 61 views
1

我想在Oracle 10g中用HEX字符串(圖像的十六進制表示)更新包含圖像的blob列。不幸的是,我被允許使用的唯一的事情是一個簡單的查詢,沒有程序或其他任何東西... 我一直在嘗試這個查詢,但沒有成功(PLSQL說它不是一個圖像):在Oracle中插入HEX字符串作爲圖像

update table t 
    set t.photo = (hextoraw('HEXSTRING')) 

當以這種方式使用它時,它可以工作,但是pl/sql都不能將它識別爲圖像,也不能將其識別爲應該讀取的程序。我猜這是某種類型的投射問題,但我並不熟悉OrSQL類型和投射。

任何建議將不勝感激!

回答

3

你的方法是對的。它可能是錯誤的輸入HEX?你怎麼得到它。

例如:

SQL> create table img (img blob); 

Table created. 

SQL> insert into img values (hextoraw('47494638396120002000f700000000000000330000660000990000cc0000ff002b00002b33002b66002b99002bcc002bff0055000055330055660055990055cc0055ff008 
0000080330080660080990080cc0080ff00aa0000aa3300aa6600aa9900aacc00aaff00d50000d53300d56600d59900d5cc00d5ff00ff0000ff3300ff6600ff9900ffcc00ffff3300003300333300663300993300cc3300f 
f332b00332b33332b66332b99332bcc332bff3355003355333355663355993355cc3355ff3380003380333380663380993380cc3380ff33aa0033aa3333aa6633aa9933aacc33aaff33d50033d53333d56633d59933d5cc3 
3d5ff33ff0033ff3333ff6633ff9933ffcc33ffff6600006600336600666600996600cc6600ff662b00662b33662b66662b99662bcc662bff6655006655336655666655996655cc6655ff668000668033668066668099668 
0cc6680ff66aa0066aa3366aa6666aa9966aacc66aaff66d50066d53366d56666d59966d5cc66d5ff66ff0066ff3366ff6666ff9966ffcc66ffff9900009900339900669900999900cc9900ff992b00992b33992b66992b9 
9992bcc992bff9955009955339955669955999955cc9955ff9980009980339980669980999980cc9980ff99aa0099aa3399aa6699aa9999aacc99aaff99d50099d53399d56699d59999d5cc99d5ff99ff0099ff3399ff669 
9ff9999ffcc99ffffcc0000cc0033cc0066cc0099cc00cccc00ffcc2b00cc2b33cc2b66cc2b99cc2bcccc2bffcc5500cc5533cc5566cc5599cc55cccc55ffcc8000cc8033cc8066cc8099cc80cccc80ffccaa00ccaa33cca 
a66ccaa99ccaaccccaaffccd500ccd533ccd566ccd599ccd5ccccd5ffccff00ccff33ccff66ccff99ccffccccffffff0000ff0033ff0066ff0099ff00ccff00ffff2b00ff2b33ff2b66ff2b99ff2bccff2bffff5500ff553 
3ff5566ff5599ff55ccff55ffff8000ff8033ff8066ff8099ff80ccff80ffffaa00ffaa33ffaa66ffaa99ffaaccffaaffffd500ffd533ffd566ffd599ffd5ccffd5ffffff00ffff33ffff66ffff99ffffccffffff0000000 
0000000000000000021f904010000fc002c00000000200020000008ff00371429b2619fc183080dbe899630e140810407366c2870e1c47d103764bc887020135017230e8cc8f1601168251f1661387119ca7dd194edabb3a 
c24cb92758c286482b188c5921ca31154267483b29120815e7c03d10e44262f955e84080ad4c88755056e80131528c1a4a0b41601ab72a5d20d490d5a458b30ec489940d31eacda10d4929a0da325d5bb4fae5abf7db94e7 
c53446161b673bfb68d28f8a0d0224405421b4896aa4168102923842370099c8146b4561d29da6d91253783d68908ca944881a309323dcd59e24168b535f7150b566051a204bb46232cd0cee2b18bf77d36b87a22b437804 
1194f08121a5c972d3f3634155d296ecb8991275156ba6cb568b51111bb2e28f539d5b5a46317967a713893919f05d2cf4b78a5e468beed979032f715449861023a07074c7b016692562595a7547a22a5765b6d6791f6d04 
5e51134a158247134d984230504003b')); 

1 row created. 

SQL> commit; 

Commit complete. 

然後在我的PL/SQL IDE(PL/SQL開發人員),我看到.. enter image description here

+0

嘛,我由開.jpg文件得到十六進制字符串HEX編輯器。適用於MSSQL。難道是更新操作失敗?因爲我不會插入新行,只是爲了更新現有的行。 –

+0

@BorislavGeorgiev更新與插入無關緊要。你的文本編輯器不會翻轉字節它是否即我的意思是一個GIF以47 49 46 38開頭,但有時程序顯示爲4947 3846等。 – DazzaL

+0

@BorislavGeorgiev p。如果您運行我提供的測試用例,您是否看到圖像? (作爲一個插入+作爲更新) – DazzaL