BEGIN
 INSERT INTO TEST1 SELECT  *  FROM TEST2  ;
  EXCEPTION
       WHEN NO_DATA_FOUND THEN
              o_sqlcode :=SQLCODE;
              o_msg:='无数据 出错';
              rollback;
              return ;
       WHEN OTHERS THEN
              o_sqlcode :=SQLCODE;
              o_msg :=o_msg||SQLERRM;
              rollback;
              return;
  END;我的问题是:当TEST2表没有数据时,我想达到的效果是:抛出异常,执行 WHEN NO_DATA_FOUND THEN.........。可是现在当TEST2没有数据时,直接运行成功了,没异常抛出!或许这样捕获是不对的,那应该怎么改????

解决方案 »

  1.   


    BEGIN
     select count(*) into v_num from test2;
     if v_num=0 then
       raise no_data_found;
     INSERT INTO TEST1 SELECT  *  FROM TEST2  ;
      EXCEPTION
           WHEN NO_DATA_FOUND THEN
                  o_sqlcode :=SQLCODE;
                  o_msg:='无数据 出错';
                  rollback;
                  return ;
           WHEN OTHERS THEN
                  o_sqlcode :=SQLCODE;
                  o_msg :=o_msg||SQLERRM;
                  rollback;
                  return;
      END;
      

  2.   

    BEGIN
     select count(*) into v_num from test2;
     if v_num=0 then
       raise no_data_found;
     end if;
     INSERT INTO TEST1 SELECT  *  FROM TEST2  ;
      EXCEPTION
           WHEN NO_DATA_FOUND THEN
                  o_sqlcode :=SQLCODE;
                  o_msg:='无数据 出错';
                  rollback;
                  return ;
           WHEN OTHERS THEN
                  o_sqlcode :=SQLCODE;
                  o_msg :=o_msg||SQLERRM;
                  rollback;
                  return;
      END;
      

  3.   


    BEGIN INSERT INTO TEST1 SELECT  *  FROM TEST2; COMMIT; if (sql%rowcount = 0) then
        raise no_data_found;
     end if;EXCEPTION
      WHEN NO_DATA_FOUND THEN
        o_sqlcode :=SQLCODE;
        o_msg:='无数据 出错';
        rollback;
        return ;  WHEN OTHERS THEN
        o_sqlcode :=SQLCODE;
        rollback;
        return ;
    END;
      

  4.   


    declare
    num number;
    BEGIN
    select count(*) into num FROM TEST2  ;
    if num>0 then
     INSERT INTO TEST1 SELECT  *  FROM TEST2  ;
    else
    raise_application_error(-20001,'没有数据');
    end if;
    exception 
           WHEN OTHERS THEN
                  o_sqlcode :=SQLCODE;
                  o_msg :=o_msg||SQLERRM;
                  rollback;
                  return;
    END;