【问题标题】:Insert HEX string as IMAGE in Oracle在 Oracle 中将 HEX 字符串作为 IMAGE 插入
【发布时间】:2013-01-03 00:23:41
【问题描述】:

我想在 Oracle 10g 中使用十六进制字符串(图像的十六进制表示)更新包含图像的 blob 列。不幸的是,我唯一被允许使用的是一个简单的查询,没有程序或其他任何东西...... 我一直在尝试这个查询,但没有成功(PLSQL 说它不是图像):

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

当以这种方式使用时,它可以工作,但 pl/sql 都不会将其识别为图像,也不会将应读取的程序识别为图像。我猜这是某种类型转换问题,但我对 OrSQL 类型和转换不是很熟悉。

任何建议将不胜感激!!!

【问题讨论】:

    标签: image oracle10g hex sql-update blob


    【解决方案1】:

    你的方法是正确的。它可能是错误的输入十六进制?你怎么得到它。

    例如:

    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 开发人员)中我看到了..

    【讨论】:

    • 好吧,我通过使用 HEX 编辑器打开 .jpg 文件来获取 HEX 字符串。适用于 MSSQL。会不会是 UPDATE 操作失败了?因为我不会插入新行,只是为了更新现有行。
    • @BorislavGeorgiev 更新与插入无关紧要。你的文本编辑器不会翻转字节是吗,即我的意思是 gif 以 47 49 46 38 开头,但有时程序会将其显示为 4947 3846 等。
    • @BorislavGeorgiev p.s.如果你运行我提供的测试用例,你看到图像了吗? (作为插入+作为更新)
    • 嘿,非常感谢您的回复...看来我得到了错误的数据类型(十六进制字符串为 FFD8FFE000104A46494600010101004800480000FFDB),因为最初它在 MSSQL 中以这种方式工作。使用您提供的数据时,它就像一个魅力!非常感谢!!!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-28
    • 1970-01-01
    • 1970-01-01
    • 2021-08-22
    • 1970-01-01
    相关资源
    最近更新 更多