进行例外捕获,SELECT反回空集时会抛出一个例处。

解决方案 »

  1.   

    EXCEPTION
      WHEN OTHERS THEN
        DBMS_OUTPUT.PUT_LINE( 'xxxxxxxxxx ERROR CODE = [' || SQLCODE || ']' );
        RAISE;
    END;这样就可以进行例外捕获
      

  2.   

    CREATE TABLE USER_SIP.AA_TEST1
    (
      FIELD VARCHAR2(20)
    );CREATE TABLE USER_SIP.AA_TEST
    (
      FIELD VARCHAR2(20)
    );CREATE OR REPLACE PROCEDURE TEST
    AS
    BEGIN
    INSERT INTO AA_TEST
    SELECT *
    FROM AA_TEST1;

    EXCEPTION
    WHEN OTHERS THEN
      dbms_output.put_line('Error '||TO_CHAR(SQLCODE)||': '||SQLERRM);
    END;
    /
    -- AA_TEST1为空,则执行dbms_output.put_line('Error '||TO_CHAR(SQLCODE)||': '||SQLERRM);
      

  3.   

    如果没有其他用户访问数据库,单独执行insert into table1 select * from table2 where condition有问题吗
      

  4.   

    select 是不会有锁等待的。你在sql正在执行的时候,看看这个session 正在等待什么事件。
    先确定自己的session ,在执行sql之前,先执行 select sid from v$mystat where rownum=1;
    确定自己的sid,等sql执行了以后,启动另一个session ,select * from v$session_wait
    where sid=刚才你得到的sid,看看这个sql正在等待什么事件,然后在具体分析。