b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

oracle存储过程和时间戳变量类型的异常处理

电脑杂谈  发布时间:2020-04-09 04:16:36  来源:网络整理

oracle 异常详细信息_异常问题处理流程ipqc_oracle 过程 异常处理

下面通过一个简单的存储过程代码段说明了该问题:

CREATE OR REPLACE PROCEDURE load_error IS
  V_td1         test1.td1%TYPE;
  v_td1xh       test1.td1xh%TYPE;
  v_gxsj         timestamp ; -- 时间戳变量
  v_zhxgsj       timestamp ;
  V_COUNT NUMBER ; --用于临时存放查询结果数量,如果数量大于2时,以便循环取出处理
  V_STR VARCHAR(100) ; --用于存放临时变量
  v_errorCode load_ajxx_error.errorcode%TYPE ;
  v_errorText load_ajxx_error.errortext%TYPE ;
  v_errorline load_ajxx_error.errorline%TYPE ;
  -- 定义游标类型(用做动态游标)
  TYPE CURSOR_TYPE IS REF CURSOR;   
    CURSOR_DYNAMIC CURSOR_TYPE; 
  CURSOR test2_CURSOR IS
    SELECT td2xh,td21,td22,td23,td24 FROM test2 ;
BEGIN
  -- 循环变更游标
  FOR test2_RECORD IN test2_CURSOR LOOP 
    BEGIN 
      v_td1xh := test2_RECORD.td2xh ;
      V_td1 := test2_RECORD.td21 ;   -- 此处可能报缓冲区不足的错误
      --dbms_output.put_line(v_zhxgsj || ',' || v_gxsj) ;
    -- 截获抛出的异常
    EXCEPTION 
      WHEN OTHERS THEN
        v_errorcode := SQLCODE ; -- 异常代码
        v_errorText := Sqlerrm ; -- 异常代码描述
        v_errorline := dbms_utility.format_error_backtrace() ;  -- 异常所在行(只在oracle 10g才能使用)
        INSERT INTO load_ajxx_error(xh,errorline, errorcode, errortext, tbsj) VALUES(v_td1xh,v_errorline,v_errorcode,v_errorText,SYSDATE) ;
    END ;
    COMMIT;
  END LOOP ;
END load_error;

oracle 过程 异常处理_oracle 异常详细信息_异常问题处理流程ipqc

1. 时间戳更改简介:

使用存储过程引导数据时,通常使用时间字段(时间戳)来确定是否需要更新. 但是,如果在Oracle中将存储过程中的变量定义为DATE,则Oracle将自动将数据表中的时间字段转换为日期类型,并截取时间信息. 但是,我们要导入的数据可能一天要更新多次,并且实时性要求较高,因此必须精确到秒. 此时,使用Oracle的timestamp变量. 此变量产生的值是: 14年3月15日至12月31日,该日期足够准确,可供我们使用.

异常问题处理流程ipqc_oracle 过程 异常处理_oracle 异常详细信息

2. 人工骨异常处理简介:

使用存储过程引导数据时,异常处理是必不可少的oracle 过程 异常处理,因为我们需要知道在哪个操作中发生了错误,从而导致数据无法正确插入. 如果只有一个数据有问题,那么我们必须继续处理其他数据而不会出现问题. 在处理完所有数据之后,我们需要转到日志表以检查哪些数据错误以及哪些数据错误. ,然后通过分析解决问题数据.

异常问题处理流程ipqc_oracle 过程 异常处理_oracle 异常详细信息

具体如下:

通常,我们使用游标处理一组数据,因此我们将代码块添加到游标的循环主体中,以处理整个游标周期中可能出现的问题:

异常问题处理流程ipqc_oracle 过程 异常处理_oracle 异常详细信息

BEGIN
  -- 循环变更游标
  FOR test2_RECORD IN test2_CURSOR LOOP 
    BEGIN 
      v_td1xh := test2_RECORD.td2xh ;
      V_td1 := test2_RECORD.td21 ;   -- 此处可能报缓冲区不足的错误
      --dbms_output.put_line(v_zhxgsj || ',' || v_gxsj) ;
    -- 截获抛出的异常
    EXCEPTION 
      WHEN OTHERS THEN
        v_errorcode := SQLCODE ; -- 异常代码
        v_errorText := Sqlerrm ; -- 异常代码描述
        v_errorline := dbms_utility.format_error_backtrace() ;  -- 异常所在行(只在oracle 10g才能使用)
        INSERT INTO load_ajxx_error(xh,errorline, errorcode, errortext, tbsj) VALUES(v_td1xh,v_errorline,v_errorcode,v_errorText,SYSDATE) ;
    END ;
    COMMIT;
  END LOOP ;
END ;

开始...异常...结束;在FOR循环中至关重要.

SQLCODE: oracle中的关键字,表示错误代码.

SQLERRM: oracle中的关键字,表示错误描述. 有时可能很长,您可以使用substr对其进行拦截. 通常oracle 过程 异常处理,只需要排名前200名就足够了. 我们只需要知道一些简单的信息即可.

dbms_utility.format_error_backtrace(): 仅在Oracle 10g中引入的功能,这意味着找到发生错误的行


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-168999-1.html

    相关阅读
      发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

      热点图片
      拼命载入中...