首 页IT知识库翔宇问吧收藏内容
当前位置:翔宇亭IT乐园IT知识库数据库Oracle

关于Oracle存储过程的若干问题探讨

减小字体 增大字体 作者:不详  来源:天极网  发布时间:2010-05-14 20:42:00

本文探讨了在Oracle数据库时应该注意的一些问题及使用技巧。

(1)在Oracle中,数据表别名不能加as,如:

select a.appname from appinfo a;-- 正确

select a.appname from appinfo as a;-- 错误

也许,是怕和oracle中的存储过程中的关键字as冲突的问题吧

(2)在存储过程中,select某一字段时,后面必须紧跟into,如果select整个记录,利用游标的话就另当别论了。

select af.keynode into kn from APPFOUNDATION af where af.appid=aid and af.foundationid=fid;-- 有into,正确编译

select af.keynode from APPFOUNDATION af where af.appid=aid and af.foundationid=fid;-- 没有into,编译报错,提示:Compilation

Error: PLS-00428: an INTO clause is expected in this SELECT statement

(3)在利用select...into...语法时,必须先确保数据库中有该条记录,否则会报出"no data found"异常。

可以在该语法之前,先利用select count(*) from 查看数据库中是否存在该记录,如果存在,再利用select...into...

(4)在存储过程中,别名不能和字段名称相同,否则虽然编译可以通过,但在运行阶段会报错

select keynode into kn from APPFOUNDATION where appid=aid and foundationid=fid;-- 正确运行

select af.keynode into kn from APPFOUNDATION af where af.appid=appid and af.foundationid=foundationid;-- 运行阶段报错,提示

ORA-01422:exact fetch returns more than requested number of rows

(5)在存储过程中,关于出现null的问题

假设有一个表A,定义如下:

create table A(

  id varchar2(50) primary key not null,

  vcount number(8) not null,

  bid varchar2(50) not null -- 外键

  );如果在存储过程中,使用如下语句:

select sum(vcount) into fcount from A where bid='xxxxxx';如果A表中不存在bid="xxxxxx"的记录,则fcount=null(即使fcount定义时设置了默认值,如:fcount number(8):=0依然无效,fcount还是会变成null),这样以后使用fcount时就可能有问题,所以在这里最好先判断一下:

  if fcount is null then

   fcount:=0;

  end if;这样就一切ok了。

  6.Hibernate调用oracle存储过程

 this.pnumberManager.getHibernateTemplate().execute(

  new HibernateCallback() ...{

   public Object doInHibernate(Session session)

   throws HibernateException, SQLException ...{

   CallableStatement cs = session.connection().prepareCall("{call modifyapppnumber_remain(?)}");

   cs.setString(1, foundationid);

   cs.execute();

   return null;

  }

 });

  本文由翔宇亭IT乐园http://www.biye5u.com)提供,有什么意见或建议请留言评论。

微信搜索“优雅的代码”关注本站的公众号,或直接使用微信扫描下面二维码关注本站公众号,以获取最新内容。

个人成长离不开各位的关注,你的关注就是我继续前行的动力。

知识评论评论内容只代表网友观点,与本站立场无关!

   评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
愿您的精彩评论引起共鸣,带来思考和价值。
用户名: 查看更多评论
分 值:100分 90分 80分 70分 60分 40分 20分
内 容:
验证码:
关于本站 | 网站帮助 | 广告合作 | 网站声明 | 友情连接 | 网站地图
本站部分内容来自互联网,如有侵权,请来信告之,谢谢!
Copyright © 2007-2022 biye5u.com. All Rights Reserved.