zoukankan      html  css  js  c++  java
  • Oracle 查询 ORA-01555 错误,处理方式。

    --创建临时表
    create table corrupt_lob (ID VARCHAR2(50));
    --循环检索表中错误数据并将ID插入临时表
    declare error_1578 exception;
    error_1555 exception;
    error_22922 exception;
    pragma exception_init(error_1578,-1578);
    pragma exception_init(error_1555,-1555);
    pragma exception_init(error_22922,-22922);
    n number;
    begin
    for cursor_lob in (select ID, 大字段名称 from 表名 )--括号内按时间过滤
    loop
    begin n:=dbms_lob.instr(cursor_lob.大字段名称,hextoraw('889911'));
    exception when error_1578 then insert into corrupt_lob values (cursor_lob.ID); commit;
    when error_1555 then insert into corrupt_lob values (cursor_lob.ID); commit;
    when error_22922 then insert into corrupt_lob values (cursor_lob.ID);
    commit;
    end;
    end loop;
    end;


    SELECT *,rowid FROM corrupt_lob;

    ---查询
    SELECT t.id,t.yb_settlement_value,rowid FROM PM_PAY_ACCOUNT T WHERE
    T.SETTLEMENT_TIME BETWEEN TO_DATE('2021-10-28 00:00:00','YYYY-MM-DD HH24:MI:SS') AND TO_DATE('2021-10-30 00:00:00','YYYY-MM-DD HH24:MI:SS')
    and t.id in (select id from corrupt_lob);

    ---更新为空
    update PM_PAY_ACCOUNT T
    set t.yb_settlement_value = ''
    WHERE T.SETTLEMENT_TIME BETWEEN
    TO_DATE('2021-10-28 00:00:00', 'YYYY-MM-DD HH24:MI:SS') AND
    TO_DATE('2021-10-30 00:00:00', 'YYYY-MM-DD HH24:MI:SS')
    and t.id in (select id from corrupt_lob);
    commit;

    以上步骤,创建一个临时表,检索报错的表中大字段。若发生 01555错误,将其存储到临时表中,然后set null。这是临时解决方案。具体的还要看Oracle 到底出了什么问题。

  • 相关阅读:
    使用iconv编程进行字符集转换
    Unity3D学习之路 C#学习笔记(一)
    跨平台的游戏客户端Socket封装
    TCP长连接与短连接的区别
    C++中的long long和__int64类型
    基于cocos2dx的游戏客户端优化
    Android NDK带来什么
    strcpy_s与strcpy的比较
    英文字母和中文汉字在不同字符集编码下的字节数
    socket的read和recv函数的区别
  • 原文地址:https://www.cnblogs.com/XiaoGer/p/15494156.html
Copyright © 2011-2022 走看看