代码如下: 看看有没有问题!!!谢谢!!!!!!!create or replace PROCEDURE HOUSINGRENT_INFO_INSERT 
(.............)ASv_rybh VARCHAR2(20);BEGIN  SELECT RYBH INTO v_rybh FROM RYJBXX where RYBH=rybh;
  
  IF length(v_rybh)<>0 THEN
    INSERT INTO RYJBXX(RYBH,GMSFHM,XM,ZJZL,ZJHM,XB,MZ,CSRQ,CSXZ,DJR,DJSJ,DJDW,
    DJDWMC,DJRXM,DELFLAG,SENDFLAG,SHFLAG,IMAGE)
    VALUES(rybh,gmsfhm,ry_name,zjzl,zjhm,sex,nationality,birth,csxz,djr,to_date(djsj,'YYYY-MM-DD'),djdw,
    djdwmc,djrxm,delflag,sendflag,shflag,image);
  END IF;
  
  INSERT INTO CHEZFW (CZXXBH,RYJGBH,CZFWBH,YFZGX,ZLRQ,TZRQ,TZYY,CZRQ,CZDW,CZRY,DELFLAG,SENDFLAG)
  VALUES(czxxBH,czrBH,czfwBH,yfzgx,to_date(zlrq,'YYYY-MM-DD'),to_date(tzrq,'YYYY-MM-DD'),
  tzyy,to_date(czrq,'YYYY-MM-DD'),czdw,czr,delflag,sendflag);
  
   COMMIT;
  
  EXCEPTION 
    WHEN OTHERS THEN ROLLBACK;
    
  OPEN rfcur FOR SELECT CHEZFW.CZXXBH,RYJBXX.RYBH FROM CHEZFW,RYJBXX WHERE CHEZFW.CZXXBH=czxxbh AND RYJBXX.RYBH=rybh;
  
END HOUSINGRENT_INFO_INSERT;谢谢大家看看。有没有问题。是不是作为一个事务处理的。

解决方案 »

  1.   

    前面没问题,只是不懂为什么在exception里面要开cursor
      

  2.   


    我是想插入成功,可以查询到每个表是不是存在刚刚插入的值,然后返回判断的。
    写在exception 下面 就属于exception的内容了?
      

  3.   

    你这里想要实现的事务嵌套是什么意思,这里事务还是一起的,要实现事务嵌套,需要用自治事务把要嵌套的事务放到另一个procedure中,这样来间接实现。
      

  4.   

    鼠标指在 exception 处 有个警号:
        Warning(58,3): PLW-06009: 过程 "HOUSINGRENT_INFO_INSERT" OTHERS 处理程序并未在 RAISE 或 RAISE_APPLICATION_ERROR 中终止
      

  5.   

    proc里前部分没有问题,exception的内容 不理解
    你要是想看所插入的是不是执行过程插入的数据  你可以另外查询就可以
      

  6.   

    SELECT RYBH INTO v_rybh FROM RYJBXX where RYBH=rybh; 
      
      IF length(v_rybh) <>0 THEN 
        INSERT INTO RYJBXX(RYBH,GMSFHM,XM,ZJZL,ZJHM,XB,MZ,CSRQ,CSXZ,DJR,DJSJ,DJDW, 
        DJDWMC,DJRXM,DELFLAG,SENDFLAG,SHFLAG,IMAGE) 
        VALUES(rybh,gmsfhm,ry_name,zjzl,zjhm,sex,nationality,birth,csxz,djr,to_date(djsj,'YYYY-MM-DD'),djdw, 
        djdwmc,djrxm,delflag,sendflag,shflag,image); 
      END IF; 
      
      INSERT INTO CHEZFW (CZXXBH,RYJGBH,CZFWBH,YFZGX,ZLRQ,TZRQ,TZYY,CZRQ,CZDW,CZRY,DELFLAG,SENDFLAG) 
      VALUES(czxxBH,czrBH,czfwBH,yfzgx,to_date(zlrq,'YYYY-MM-DD'),to_date(tzrq,'YYYY-MM-DD'), 
      tzyy,to_date(czrq,'YYYY-MM-DD'),czdw,czr,delflag,sendflag); 
      OPEN rfcur FOR SELECT CHEZFW.CZXXBH,RYJBXX.RYBH FROM CHEZFW,RYJBXX WHERE CHEZFW.CZXXBH=czxxbh AND RYJBXX.RYBH=rybh;
      COMMIT;  现在这样写的。可是第一句 select 查询的结果应该为null(表中没有数据),报错:执行存储过程错误:ORA-01403: 未找到任何数据。这应该如何解决呢。
      

  7.   

    create or replace PROCEDURE HOUSINGRENT_INFO_INSERT 
    (..., rybh_out OUT number, chezfw OUT number) AS v_rybh   number := 0; 
    BEGIN    SELECT COUNT(RYBH) INTO v_rybh FROM RYJBXX where RYBH=rybh;    -- if this person doesn't exist in table RYJBXX
       IF v_rybh = 0 THEN 
          -- RYJBXX 人员基本信息?
          INSERT INTO RYJBXX(RYBH,GMSFHM,XM,ZJZL,ZJHM,XB,MZ,CSRQ,CSXZ,DJR,DJSJ,DJDW,DJDWMC,DJRXM,DELFLAG,
                             SENDFLAG,SHFLAG,IMAGE) 
          VALUES(rybh,gmsfhm,ry_name,zjzl,zjhm,sex,nationality,birth,csxz,djr,to_date(djsj,'YYYY-MM-DD'),
                             djdw,djdwmc,djrxm,delflag,sendflag,shflag,image); 
       END IF; 
      
       INSERT INTO CHEZFW (CZXXBH,RYJGBH,CZFWBH,YFZGX,ZLRQ,TZRQ,TZYY,CZRQ,CZDW,CZRY,DELFLAG,SENDFLAG) 
       VALUES(czxxBH,czrBH,czfwBH,yfzgx,to_date(zlrq,'YYYY-MM-DD'),to_date(tzrq,'YYYY-MM-DD'), 
       tzyy,to_date(czrq,'YYYY-MM-DD'),czdw,czr,delflag,sendflag); 
      
      COMMIT; 
      
      SELECT COUNT(RYBH) INTO rybh_out FROM RYJBXX where RYBH=rybh;
      --SELECT COUNT(CHEZFW.PK_COLUMNS, use ||) INTO chezfw FROM CHEZFW WHERE PK_CONDITIONS;
      
      EXCEPTION 
        WHEN OTHERS THEN ROLLBACK; 
      
    END HOUSINGRENT_INFO_INSERT;