【问题标题】:Oracle blob - inserting long (over 4000 hex-digits) data in sql commandOracle blob - 在 sql 命令中插入长(超过 4000 个十六进制数字)数据
【发布时间】:2011-04-12 02:37:46
【问题描述】:

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

update tablename set fieldname='AA';

作品 - 1 个字节;

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

没有。 Niether Concat 帮助;字符串不能大于 4000 个字符。有没有别的办法,只用sql命令?

【问题讨论】:

  • 您是否坚持它必须是 SQL - 是否可以接受一个独立的 pl/sql 块?我们是在谈论 SQL*Plus 作为客户端吗? (在某些客户端语言中,Ora 10 中的字符串可以是 32k)。我想你想要一个 PL/SQL 块之类的东西,结合 HEXTORAW 来填充 BLOB 变量,然后使用 BLOB 进行更新。
  • 十六进制数据从何而来?操作系统文件或类似的东西?从根本上说,没有办法将超过 4000 个字符的文字压缩到 SQL 语句中。但是,如果您有一些回旋余地,则有一些解决方法。我们需要更多细节,特别是 WRT 要求“仅使用 sql 命令”的原因
  • 只是为了添加到@APC 注释,你有“fieldname='AA...'”的语句实际上是 SQL 的 VARCHAR2,因此限制了 4K。您正在利用 Oracle 的隐式类型转换,您应该避免这样做。

标签: sql oracle blob


【解决方案1】:

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

  1. 从表中选择 blob
  2. 从结果集中获取 blob
  3. 从 blob 获取输出流
  4. 写入流
  5. 刷新和更新表中的 blob
  6. 提交

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

【讨论】:

    【解决方案2】:
    DECLARE
      buf RAW(100000);
    BEGIN
      buf := hextoraw('626567696E2030207575656E636F64652E6275660D0A6');
      UPDATE tableName SET columnName = buf;
      --or
      INSERT INTO tableName(charColumn, BlobColumn) values ('Sting', buf);
    END;
    

    【讨论】:

      猜你喜欢
      • 2014-01-04
      • 1970-01-01
      • 2010-09-15
      • 2020-12-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-21
      • 2011-06-28
      相关资源
      最近更新 更多