Oracle blob-在sql命令中插入长(超过4000个十六进制数字)数据

Oracle blob-在sql命令中插入长(超过4000个十六进制数字)数据,sql,oracle,blob,Sql,Oracle,Blob,在Oracle 11中,如何仅使用sql命令将大数据(~100000个十六进制数字)插入Blob字段中(没有任何带有loadcluase之类的外部数据) Works-1字节 update tablename set fieldname='AA...(4000 hex-digits)...AA'; 没有。NietherConcat帮助;字符串不能大于4000个字符。是否有其他方法,仅使用sql命令?据我所知,这是不可能的。您可以做的是: 从表中选择blob 从resultset获取blob 从b

在Oracle 11中,如何仅使用sql命令将大数据(~100000个十六进制数字)插入Blob字段中(没有任何带有
load
cluase之类的外部数据)

Works-1字节

update tablename set fieldname='AA...(4000 hex-digits)...AA';

没有。Niether
Concat
帮助;字符串不能大于4000个字符。是否有其他方法,仅使用sql命令?

据我所知,这是不可能的。您可以做的是:

  • 从表中选择blob
  • 从resultset获取blob
  • 从blob获取outputstream
  • 写入流
  • 刷新并更新表中的blob
  • 承诺

  • 您应该能够通过创建一个临时blob并将其用于写入和更新来替换步骤1-2。

    您是否坚持它必须是SQL?是否可以接受一个自包含的pl/SQL块?我们是否将SQL*Plus作为客户机进行讨论??(在某些客户端语言中,ORA10中的字符串可以是32k)。我认为您需要类似PL/SQL块的东西,结合HEXTORAW来填充BLOB变量,然后使用BLOB进行更新?操作系统文件或类似的东西?从根本上说,没有办法将超过4000个字符的文本压缩到SQL语句中。然而,如果你有一些回旋余地,就有一些变通办法。我们需要更多的细节,特别是“仅使用sql命令”的要求背后的原因,只是为了在@APC comment中添加您的“fieldname='AA…”语句实际上是sql的VARCHAR2,因此限制了4K。您正在利用Oracle的隐式类型转换,这是您真正应该避免的。
    DECLARE
      buf RAW(100000);
    BEGIN
      buf := hextoraw('626567696E2030207575656E636F64652E6275660D0A6');
      UPDATE tableName SET columnName = buf;
      --or
      INSERT INTO tableName(charColumn, BlobColumn) values ('Sting', buf);
    END;
    
    DECLARE
      buf RAW(100000);
    BEGIN
      buf := hextoraw('626567696E2030207575656E636F64652E6275660D0A6');
      UPDATE tableName SET columnName = buf;
      --or
      INSERT INTO tableName(charColumn, BlobColumn) values ('Sting', buf);
    END;