积木首页 - 学院 - 软件测试 - 技术百科 - 问答 - 黄页 - 手册 - 站长工具 - 社区
登录 | 注册
    
群组 >> Oracle数据库学习社区

Oracle数据库学习社区

共有155位成员   人气指数 -   最新排名 -

【话题】Oracle 事务嵌套[if(true)then insert1 end if; insert2]

2009-08-11 21:32:32 来自:小宝在 浏览数:41
代码如下: 看看有没有问题!!!谢谢!!!!!!!

create or replace PROCEDURE HOUSINGRENT_INFO_INSERT
(.............)

AS

v_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;

谢谢大家看看。有没有问题。是不是作为一个事务处理的。
 
huqipeng回复于11日21点38分 
proc里前部分没有问题,exception的内容 不理解
你要是想看所插入的是不是执行过程插入的数据  你可以另外查询就可以
 
dsdzjh2008回复于11日21点45分 
鼠标指在 exception 处 有个警号:
    Warning(58,3): PLW-06009: 过程 "HOUSINGRENT_INFO_INSERT" OTHERS 处理程序并未在 RAISE 或 RAISE_APPLICATION_ERROR 中终止
 
今生有你回复于11日21点52分 
前面没问题,只是不懂为什么在exception里面要开cursor
 
阎霄汉回复于11日21点59分 
SQL code 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;
 
fg56212回复于11日22点07分 
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: 未找到任何数据。这应该如何解决呢。
 
工作者回复于11日22点14分 


我就想 插入两张表,第一张是人员信息, 要判断是不是已经有这个人了,第二张表是这个人关于租房子的信息。如果人员信息已经存在就插入第二张表;如果不存在,就两张表都要插入成功,否则,都不插入。
最后想 插入成功,查询两张表是不是已经存在刚刚插入的记录,存储过程输出结果集。
不知道怎么搞,第一次接触.
 
slxxdmh回复于11日22点20分 


我是想插入成功,可以查询到每个表是不是存在刚刚插入的值,然后返回判断的。
写在exception 下面 就属于exception的内容了?
 
兰summer回复于11日22点27分 
你这里想要实现的事务嵌套是什么意思,这里事务还是一起的,

要实现事务嵌套,需要用自治事务把要嵌套的事务放到另一个procedure中,这样来间接实现。
Oracle数据库学习社区的其他话题...

PHP: PHP技巧 - PHP基础 - PHP实例 - PHP错误代码 - 正则表达式 - 热门脚本语言: DOS命令 - vbs - CSS/HTML - python - perl - ruby - shell编程 - Powershell

JS: node.js - JS基础 - extjs - jQuery - JavaScript技巧

网址导航成语大全积木 TinyMCE 服务邮箱: Gimoohr(#)gmail.com
Copyright © 2008 Gimoo.Net  京ICP备05050695号