精华内容
下载资源
问答
  • Oracle主键异常处理
    2021-08-11 11:44:15

    Oracle主键异常处理

    参考文章:

    (1)Oracle主键异常处理

    (2)https://www.cnblogs.com/xuanwang/p/6508769.html


    备忘一下。


    更多相关内容
  • oracle主键冲突 ORA-00001

    千次阅读 2021-05-10 15:44:30
    这是主键冲突的错误,如果该表有主键自增长,可以检查 oracle 的 sequence select SEQUENCE_OWNER, SEQUENCE_NAME, MIN_VALUE, MAX_VALUE, INCREMENT_BY, CACHE_SIZE, LAST_NUMBER from all_sequences where ...

    在迁移数据库后,有些表插入数据会报错:
    ORA-00001: unique constraint … violated.
    这是主键冲突的错误,如果该表有主键自增长,可以检查 oracle 的 sequence

    select SEQUENCE_OWNER, SEQUENCE_NAME, MIN_VALUE, MAX_VALUE, INCREMENT_BY, CACHE_SIZE, LAST_NUMBER 
    from all_sequences where SEQUENCE_OWNER = 'IRS';
    

    在这里插入图片描述

    假设 TEST_SEQUENCE 和实际的值相比偏小,可以先删除,然后重新创建

    DROP SEQUENCE IRS.TEST_SEQUENCE;
    
    create sequence IRS.TEST_SEQUENCE
    minvalue 1
    maxvalue 999999999999999999999999999
    start with 165--起始值
    increment by 1--增量
    cache 20;
    

    重新查询后可以看到 TEST_SEQUENCE的LAST_NUMBER变成了 165
    在这里插入图片描述

    展开全文
  • catch捕获主键冲突异常

    千次阅读 2020-03-19 15:32:30
    在catch(Exception e)里捕获主键冲突异常 在catch里加上这个就可以捕获主键异常 if(e instanceof DuplicateKeyException){ // "该接口数据主键冲突"+e.getMessage() }else { //"未知异常:"+e...

    在catch(Exception e)里捕获主键冲突异常

     

    try {
    	
    } catch (Exception e) {
    	 
    	if(e instanceof DuplicateKeyException){
    	                                    
    	      // "该接口数据主键冲突"+e.getMessage()
    	 }else {
    	     
    	     //"未知异常:"+e.getMessage()
    	 }
    }

     

    展开全文
  • Oracle异常处理异常

    2021-05-05 01:46:58
    Oracle异常处理异常处理是考验一个应用程序健壮性的最好方式,开发人员必须考虑程序中可能出现的各种错误,并进行相应的处理。Oracle异常分为:1.预定义异常2.非预定义异常3.自定义异常三种。一、预定义异常预定义...

    Oracle异常处理异常处理是考验一个应用程序健壮性的最好方式,开发人员必须考虑程序中可能出现的各种错误,并进行相应的处理。

    Oracle中异常分为:1.预定义异常2.非预定义异常3.自定义异常三种。

    一、预定义异常预定义异常是指由PL/SQL所提供的系统异常。当PL/SQL应用程序违反了Oracle规则或出现其它系统限制的情况时,将会隐含地触发一个内部异常。以下是PL/SQL为我们预定义的异常(经常更新中):

    1.CURSOR_ALREADY_OPEN(cursor_already_open)该异常触发ORA-06511错误。

    当程序中的一个游标已经执行了打开操作,如果开发人员试图再一次打开这个已经打开的游标时,将触发该异常。

    示例:

    DECLARE

    CURSOR test_cursor IS

    SELECT SYSDATE FROM dual;

    BEGIN

    OPEN test_cursor;

    FOR test_cursor2 IN test_cursor LOOP

    dbms_output.put_line(test_cursor2.SYSDATE);

    END LOOP;

    EXCEPTION

    WHEN cursor_already_open THEN

    dbms_output.put_line('游标已经打开,不能再次对游标执行打开操作。');

    END;

    /

    2. INCALID_CURSOR(incalid_cursor)该异常触发ORA-01001错误。

    当试图对一个尚未打开的游标执行任何操作,如打开该非法的游标执行赋值操作,或者关闭未打开的游标时,将触发该异常。

    示例:

    DECLARE

    CURSOR test_cursor IS

    SELECT SYSDATE FROM dual;

    test_time DATE;

    BEGIN

    --OPEN test_cursor;

    FETCH test_cursor

    INTO test_time;

    dbms_output.put_line('当前时间为: ' || test_time);

    CLOSE test_cursor;

    EXCEPTION

    WHEN invalid_cursor THEN

    dbms_output.put_line('请检查游标是否已经打开.');

    END;

    /

    3.NO_DATA_FOUND(no_data_found)该异常触发ORA-01403错误。

    当读取一个游标进行赋值操作(SELECT INTO操作)时,如果未返回任何行,将触发该异常。

    示例:

    DECLARE

    test_owner DATE;

    BEGIN

    SELECT t.owner INTO test_owner FROM all_tables t WHERE t.table_name =

    'test';

    dbms_output.put_line(test_owner);

    EXCEPTION

    WHEN NO_DATA_FOUND THEN

    dbms_output.put_line('No value.');

    END;

    /

    4. TOO_MANY_ROWS(too_many_rows)该异常触发ORA-01422错误。

    上面是没有返回记录,这里是返回对条记录的时候会触发该异常。

    示例:

    DECLARE

    test_records dba_tables%ROWTYPE;

    BEGIN

    select * INTO test_records from dba_tables where owner='APPS' AND ROWNUM <

    3;

    dbms_output.put_line(test_records.table_name);

    EXCEPTION

    WHEN too_many_rows THEN

    dbms_output.put_line('Too many values.');

    END;

    /

    5. VALUE_ERROR(value_error)该异常触发ORA-06502错误。

    当在PL/SQL程序中执行赋值操作时,如果右边值的长度大于左边变量的长度,将触发该异常。

    示例:

    DECLARE

    v_test VARCHAR2(1);

    BEGIN

    SELECT 'WHAT' INTO v_test FROM dual;

    dbms_output.put_line(v_test);

    EXCEPTION

    WHEN value_error THEN

    dbms_output.put_line('变量的长度不够.');

    END;

    /

    6.DUP_VAL_ON_INDEX(dup_val_on_index)该异常触发ORA-00001错误。

    若表的每一列声明为主键,或具有惟一性,如果对该列插入重复的值时将触发该异常。

    示例:

    CREATE TABLE test_table

    (

    v_id NUMBER PRIMARY KEY,

    v_name VARCHAR2(20)

    )

    INSERT INTO test_table VALUES(1,'test1');

    INSERT INTO test_table VALUES(2,'test2');

    SELECT * FROM test_table;

    BEGIN

    UPDATE test_table SET v_name = new_name WHERE v_id = &input_id;

    EXCEPTION

    WHEN dup_val_on_index THEN

    dbms_output.put_line('在deptno列上不能出现重复值.');

    END;

    /

    7. CASE_NOT_FOUND(case_not_found)该异常触发ORA-06592错误。

    在CASE语句中,如果CASE语句的条件在WHEN子句中没有找到对应的条件分支,且该CASE语句不包含ELSE分支,将触发该异常。

    示例:

    DECLARE

    v_test NUMBER;

    BEGIN

    SELECT val INTO v_test FROM dual;

    CASE

    WHEN v_test = 1 THEN

    dbms_output.put_line(v_test);

    WHEN v_test = 2 THEN

    dbms_output.put_line(v_test);

    WHEN v_test = 3 THEN

    dbms_output.put_line(v_test);

    --ELSE

    -- dbms_output.put_line(v_test);

    END CASE;

    EXCEPTION

    WHEN case_not_found THEN

    dbms_output.put_line('在CASE语句中没有与' || v_test || '相关的条件.');

    END;

    /

    8.ZERO_DIVIDE(zero_divide)该异常触发ORA-01476错误。

    当在程序中使用0作为除数进行运算时,将触发该异常。

    示例:

    DECLARE

    v_test1 NUMBER := 100;

    v_test2 NUMBER := 0;

    v_test3 NUMBER := 0;

    BEGIN

    v_test3 := v_test1 / v_test2;

    dbms_output.put_line(v_test3);

    EXCEPTION

    WHEN zero_divide THEN

    dbms_output.put_line('0不能作为除数.');

    END;

    /

    9. INVALID_NUMBER(invalid_number)该异常触发ORA-01722错误。

    数字或值错误,或字符到数值的转换错误。

    示例:

    BEGIN

    UPDATE emp SET sal = sal + '1oo'; -- 1oo

    EXCEPTION

    WHEN invalid_number THEN

    dbms_output.put_line('输入的数字不正确.');

    END;

    /

    DECLARE

    v_test NUMBER;

    v_test2 NUMBER;

    BEGIN

    v_test := '100';

    v_test2 := '1a';

    dbms_output.put_line(v_test);

    EXCEPTION

    WHEN INVALID_NUMBER THEN

    DBMS_OUTPUT.PUT_LINE('输入的数字不正确.');

    END;

    /

    10. ACCESS_INTO_NULL(access_into_null)该异常触发ORA-06530错误。

    当程序中的对象还没有先进行对象初始化的操作,就直接为对象的属性赋值,将触发该异常。

    示例:

    DECLARE

    v_test test_type;

    BEGIN

    v_test.v_name := 'test';

    EXCEPTION

    WHEN access_into_null THEN

    dbms_output.put_line('首先初始化对象v_test');

    END;

    /

    11. COLLECTION IS NULL(collection is null)该异常触发ORA-06531错误。

    在给集合元素赋值前,必须先初始化该集合元素,否则触发该异常。

    示例:

    DECLARE

    TYPE emp_ssn_array IS TABLE OF NUMBER/* INDEX BY BINARY_INTEGER*/;

    best_employees emp_ssn_array;

    BEGIN

    best_employees(0) := '123456';

    dbms_output.put_line('best_employees(0): ' || best_employees(0));

    EXCEPTION

    WHEN collection_is_null THEN

    dbms_output.put_line('必须初始化集合元素.');

    END;

    /

    12. SUBSCRIPT_BEYOND_COUNT(subscript_beyond_count)该异常触发ORA-06533错误。

    当使用复合数据类型时,如果下标越界触发该异常。

    示例:

    DECLARE

    TYPE test_array IS VARRAY(20) OF NUMBER;

    v_test test_array;

    BEGIN

    v_test := test_array(123456);

    dbms_output.put_line('v_test(1): ' || v_test(2));

    EXCEPTION

    WHEN subscript_beyond_count THEN

    dbms_output.put_line('下标越界.');

    END;

    /

    13.SUBSCRIPT_OUTSIDE_LIMIT(subscript_outside_limit)该异常触发ORA-06532错误

    当使用复合数据类型时,如果下标为负值时触发该异常。

    示例:

    DECLARE

    TYPE test_array IS VARRAY(20) OF NUMBER;

    v_test test_array;

    BEGIN

    v_test := test_array(123456);

    dbms_output.put_line('v_test(-1): ' || v_test(-1));

    EXCEPTION

    WHEN subscript_outside_limit THEN

    dbms_output.put_line('下标不能是负数.');

    END;

    /

    14.LONIN_DENIED该异常触发ORA_01017错误。

    当PL/SQL连接数据库时,如果密码错误,将触发该异常。

    15. NOT_LOGGED_ON该异常触发ORA-01012错误。

    如果PL/SQL没有连接数据库,程序运行将触发该异常。

    16 PROGRAM_ERROR该异常触发ORA-06501错误。

    如果出现该异常,则表示PL/SQL的内部问题。用户可能需要重新安装数据字典和PL/SQL系统包。

    17 ROWTYPE MISMATCH该异常触发ORA-06504错误。

    在赋值时,如果宿主游标变量和PL/SQL游标变量的返回类型不兼容,将触发该异常。

    18 SELF_IF_NULL该异常触发ORA-30625错误。

    在使用对象类型时,如果在NULL示例上调用成员方法将触发该异常。

    19 STORAGE_ERROR该异常触发ORA-06500错误。

    当PL/SQL块运行时,如果走出内在空间或内在被损坏则触发该异常。

    20 SYS_INVALID_ROWID该异常触发ORA-01410错误。

    当将字符串转变为ROWID时,如果使用了无效的字符串则触发该异常。

    21 TIMEOUT_ON_RESOURCE该异常触发ORA-00051错误。

    Oracle在等待资源时出现超时错误时将触发该异常。

    22 ORA-04021Oracle在等待资源时出现超时错误,该资源可能被其它session锁住,此时将触发该异常。

    23 ORA-01791 不是Selected表达式SELECT DISTINCT goodsid,

    barcode,

    depotid,

    goodsname

    FROM sa_sale

    WHERE depotid = '11'

    ORDER BY selldate

    这句话执行的时候就有错误, 但把排序换成order by Goodsid

    或其它Barcode,DepotId,GoodsName的时候均没有错误,这是因为selldate不在查询结果字段中,而且这个语句是distinct语句。所以会出现这个错误

    下边给出正确的解决办法:

    SELECT goodsid,

    barcode,

    depotid,

    goodsname

    FROM (SELECT DISTINCT goodsid,

    barcode,

    depotid,

    goodsname,

    selldate

    FROM sa_sale

    WHERE depotid = '11')

    ORDER BY selldate

    24 ORA-01002: fetch out of sequence当游标中数据集已经取完,然后再一次进行FETCH操作时将触发该异常。

    25 PLS-00382: expression is of wrong type表达式类型错误。即在代码中赋予操作的左右两边的类型不等。

    二 非预定义异常使用非预定义异常的步骤如下:

    定义异常-> 关联异常和错误-> 引用例外

    当定义Oracle错误和例外之间的关联关系时,要使用伪过程EXCEPTION_INTI。

    下面以处理ORA-02291错误为例说明:

    DECLARE

    e_integrity EXCEPTION;

    PRAGMA EXCEPTION_INIT(e_integrity, -2291);

    BEGIN

    UPDATE emp SET deptno = dno WHERE empno = &eno;

    EXCEPTION

    WHEN e_integrity THEN

    dbms_output.put_line('该部门不存在.');

    END;

    /

    自定义异常使用预定义异常和非预定义异常,程序可以捕获Oracle错误,并且在出现Oracle错误时自动触发对应的异常。但是在实际应用中,可能还会遇到其它错误,这时,可以为特定的情况自定义异常,不过需要显示触发该异常:通过定义异常,然后关联异常和错误,显示触发异常,最后在EXCEPTION中处理该异常。

    示例:

    DECLARE

    l_error_message VARCHAR2(200);

    e_user_exception EXCEPTION;

    BEGIN

    ** ** ** ** **;

    IF '出现错误' THEN

    l_error_message := '定义错误信息';

    RAISE e_user_exception;

    END IF;

    EXCEPTION

    WHEN e_user_exception THEN

    raise_application_error(-20001, l_error_message);

    END;

    /

    四 例外函数1 SQLCODE,SQLERRM在PL/SQL块中出现Oracle错误时,通过使用例外函数可以取得错误号以及相关的错误消息。

    SQLCODE 返回Oracle错误号。

    SQLERRM 返回错误号对应的错误消息。

    示例:

    DECLARE

    v_ename emp.ename%TYPE;

    BEGIN

    SELECT ename INTO v_ename FROM emp WHERE sal = &v_sal;

    dbms_output.put_line('雇员名:' || v_ename);

    EXCEPTION

    WHEN NO_DATA_FOUND THEN

    dbms_output.put_line('不存在工资为' || v_sal || '雇员');

    WHEN OTHERS THEN

    dbms_output.put_line('错误号' || SQLCODE);

    dbms_output.put_line(SQLERRM);

    END;

    /

    2 RAISE_APPLICATION_ERROR在存储过程,函数和包中使用RAISE_APPLICATION_ERROR可以自定义错误号和消息。

    raise_application_error:用于自定义错误消息(用于程序段中)

    语法:

    raise_application_error(error_number,message[,{TRUE | FALSE}]);

    error_number : 错误号,范围是: -20000 ~ -20999之间的负整数;

    message : 错误消息,长度不能超过2048字节;

    第三个可靠选参数,如果TRUE,该错误会被放在先前错误堆栈中;如果FALSE(默认),则替换先前所有错误.

    示例:

    CREATE OR REPLACE PROCEDURE raise_comm

    (

    eno NUMBER,

    commission NUMBER

    ) IS

    v_comm emp.comm%TYPE;

    BEGIN

    SELECT comm INTO v_comm FROM emp WHERE emp = eno;

    IF v_comm IS NULL THEN

    raise_application_error(-20001, '该员工无补助.');

    END IF;

    EXCEPTION

    WHEN NO_DATA_FOUND THEN

    dbms_output.put_line('该雇员不存在.');

    END;

    /

    展开全文
  • 下面小编就为大家带来一篇oracle 数据按主键删除慢问题的解决方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
  • 捕捉主键冲突异常

    万次阅读 2018-06-15 17:51:20
    一定要有主键或唯一索引,否则和 INSERT INTO 没有区别. 注意: 当数据转换引发报错时,可以通过IGNORE关键字来忽略错误,这时MySQL会产生警告而不退出语句的执行,无效的数值会被调整成接近的数值并被插入。 例:...
  • dingjun123@ORADB> create table t as select * from dba_objects;Table created.Elapsed: 00:00:00.29dingjun123@ORADB> insert into t select * from (select * from t order by dbms_random.value) where r...
  • 主键冲突异常 DuplicateKeyException

    千次阅读 2016-08-06 08:04:00
    org.springframework.dao.DuplicateKeyException Exception thrown when an attempt to insert or update data results in violation of an primary key or unique constraint. Note that this is not nec...
  • --主键冲突,报错,加上ignore出错后就不报错,不插入数据,返回结果是0 --> insert ignore into success_killed(seckill_id,user_phone) values (#{seckillId},#{userPhone}) 转载于:...
  • TABLE:使用一个特定的数据库表格来保存主键。 SEQUENCE:根据底层数据库的序列来生成主键,条件是数据库支持序列。 IDENTITY:主键由数据库自动生成(主要是自动增长型) AUTO:主键由程序控制。 AUTO 默认...
  • 如果主存储过程和主函数由子过程或子函数组成,则子函数或子程序是否可以包含异常处理基于以下原则:首先oracle 过程 异常处理,如果将主程序和子程序作为一个事务处理,则不能在子程序中触发异常. 异常应在主调用...
  • 在有序的数据库列表中,经常会使用到主键作为排序的某列。有时候,在删除或者插入数据的时候,需要将所有相关的数据进行更新。如果是简单的使用update函数,会出现冲突,如在某个数据库Info中,存储的数据为: ...
  • 我们要自己造一些测试数据,并且这些SQL脚本要迁移到其他环境,迁移过程中,如果主键写死,在其他环境,可能会出现主键冲突;所以,我们要写活的主键,实现起来也很简单; 二、解决方法 insert into userInfo(id,...
  • oracle 存储过程最好的记录错误方式当你的应用有调用存储过程,而节点有几十个或者上百个,找错是不是一个很麻烦的事情,这个时候,我建议写到数据库中,下面是我做的一个demo.1. 建立错误日志记录表drop table PUB_...
  • ...Exception in thread "main" org.springframework.orm.hibernate3.HibernateSystemException: this id generator generates long, integer, short or ...JAVA 的INTERGER对应ORACLE中的NUMBER最大长度是18
  • 假如我们持久层使用的hibernate这样的框架,他提供了saveOrUpdate这种方法就会出现异常,所以为了避免这种异常,我们就需要针对不同的数据库使用不同的解决方案来解决这种 因高并发引起的主键冲突问题。 Oracle和...
  • 向有主键的表中插入大量...2.oracle判断主键冲突 直接将数据插入表中,出现冲突则捕获异常并且忽略进行下一条数据插入,没有则直接插入 第一种办法的效率要高于第二种方法,请教各位大神有没有什么更高效的办法?
  • oracle异常

    2020-12-30 16:46:05
    命名的系统异常产生原因ACCESS_INTO_NULL未定义对象CASE_NOT_FOUNDCASE中若未包含相应的WHEN,并且没有设置ELSE时COLLECTION_IS_NULL集合元素未初始化CURSER_ALREADY_OPEN游标已经打开DUP_VAL_ON_INDEX唯一索引对应...
  • 我们每周都会从正式库还原表和数据到测试库,有时候会造成当前nextval比已存在的currentval小,导致数据添加不成功,可以进入唯一主键编辑页面,将nextnumber改大一些,就可以了 转载于:...
  • oracle中为每个错误提供了一个错误号,而捕获异常则需要异常有名称,oracle提供了一些已经定义好名称的异常,这就是预定义异常oracle一共提供了25种预定义异常。 想要查看oracle预定义异常,输入下边的命令...
  • 信息   create or replace procedure test is v_sql Varchar2(2000); begin v_sql := 'update ss t set xx=1 where 1=1'; EXECUTE IMMEDIATE v_sql; EXCEPTION WHEN OTHERS THEN dbms_output.put_lin
  • 主键冲突

    千次阅读 2015-02-22 14:04:47
    主键冲突异常  详细信息  [command]= (command ownerId="13541523" ownerName="core" poolName="core" startTime="2015-02-17 09:51:59.010" endTime="1970-01-01 08:00:00.000" cost="-1424137919010...
  • Oracle数据库自增失败

    2021-08-15 06:08:43
    使用oracle数据库时,mybatis-plus设置自增,添加数据的时候失败 @TableId(value = "ID", type = IdType.AUTO) private Integer id; ; ORA-01400: 无法将 NULL 插入 ("JIANG"."T_PRODUCT"."ID") ; nested exception ...
  • 有朋友问我能否用触发器实现更新数据时,如果发现主键已经存在,则将冲突主键更新为当前记录之前的主键值。 简单的说,如果表中存在主键为1和2的记录,如果一条UPDATE语句将1...
  • [img]... 当先创建唯一约束后再创建主键约束的情况下,如果使用普通方法删除主键约束后,唯一约束索引不会被删除,这是Oracle 10g的一个PROBLEM。 本文通过一个实验给大家演示一下这个问题的...
  • oracle存储过程----异常的写法介绍

    万次阅读 2018-08-19 16:24:42
      oracle存储过程—-异常介绍   参考PL/SQL ,存储过程中的异常来自于程序本身,也有的来自开发人员自定义的数据,而所有的这些错误我们称之为异常(编译时的错误不能称为异常)。 &amp;amp;esmp; 本篇...
  • 我的程序是有一个定时任务获取文件内容(json),并将内容转成实体用saveOrUpdate方法保存,然后删除文件,不知道为什么会报违法主键唯一约束的错误,再补充一点,我这个是文件处理是异步进行的,不知道有没有影响。
  • merge into 用法深思

    2020-12-18 23:26:51
    线上出现了一个问题:mq同步某一功能的数据的时候,同一主键的数据会发多次。...抛出主键冲突异常。另外就算是进入到了不同的更新和插入的逻辑里面,有时会出现第二条数据先进来,然后第一条数据再进来...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 7,618
精华内容 3,047
关键字:

oracle 主键冲突异常