gpt4 book ai didi

sql - 插入大于 2000 或 4000 字节的 BLOB 测试字符串

转载 作者:行者123 更新时间:2023-12-04 12:40:10 26 4
gpt4 key购买 nike

我在 oracle 中有一张 table ,上面有 BLOB列,可以存储 XML 以及 XMLs zipper 。这些是客户的要求,无法更改。表格将被创建,我必须阅读并处理 BLOBs 中的一些信息。 .

我已经研究过,任何不明确的解决方案都很清楚或对我有用。

我面临的问题是 INSERT XML大于 2000 bytes 的纯数据与 utl_raw.cast_to_raw使用 DBeaver作为数据库管理员。我收到消息:

SQL Error [6502] [65000]: ORA-06502: PL/SQL: numeric or value error: raw variable length too long ORA-06512: at "SYS.UTL_RAW", line 224
java.sql.SQLException: ORA-06502: PL/SQL: numeric or value error: raw variable length too long
ORA-06512: at "SYS.UTL_RAW", line 224

问题
  • 我研究过和UTL_RAW不能超过 2000 bytes
  • 似乎4000 bytes还有另一个限制为 BLOBs在 Oracle

  • 对于这些情况,我可以做什么?

    最佳答案

    首先,您需要了解什么是 LOB。它们是“大数据”,可能比 Oracle 中的任何其他数据类型都大。它们就像文件系统上的常规文件。为了写入文件系统上的文件,您必须

  • 打开文件进行写入
  • 如果您希望从头开始填充,请截断文件
  • 在循环中分块读取源数据
  • 在同一个循环中将您的数据块一个接一个地附加到文件
  • 关闭文件

  • LOB 或多或少也是如此。在您的表中,LOB (CLOB/BLOB/NCLOB) 列只是指向磁盘存储上保存实际数据的另一个位置的指针/引用。在标准 Oracle 术语中,该指针称为“LOB 定位器”。你需要
  • 打开/初始化 LOB 定位器
  • 如果您希望从头开始填充,请截断 LOB 内容
  • 将数据块一个接一个循环地附加到 LOB 内容
  • 关闭 LOB 定位器

  • 在 PL/SQL 中,它可能如下所示:
    -- create table blob_test(id number, b blob);

    declare
    v_b blob;
    aaa raw(32767);
    longLine varchar2(32767);
    begin
    longLine := LPAD('aaaa', 32767,'x');
    aaa := UTL_RAW.CAST_TO_RAW(longLine);
    insert into blob_test values(1,empty_blob()) returning b into v_b;
    dbms_lob.open(v_b,dbms_lob.lob_readwrite);
    dbms_lob.writeappend(v_b,UTL_RAW.LENGTH (aaa) ,aaa);
    dbms_lob.close(LOB_LOC=>v_b);
    commit;
    end;

    一个解释:
  • 初始化 LOB 定位器 = insert into blob_test values(1,empty_blob()) returning b into v_b;
  • 打开 LOB 定位器进行写入 = dbms_lob.open(v_b,dbms_lob.lob_readwrite);
  • 截断 LOB 内容,如果你想从头开始填充它......这是由 empty_blob() 完成的调用 insert .
  • 在循环中将数据块附加到 LOB 内容中,一个接一个 = 此处只有 dbms_lob.writeappend() 的一次迭代,仅附加一个块 aaa长度utl_raw.length(aaa) (最多 32767 个)进入 LOB v_b
  • 关闭 LOB 定位器 = dbms_lob.close(LOB_LOC=>v_b);
  • 关于sql - 插入大于 2000 或 4000 字节的 BLOB 测试字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33166606/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com