|
?
关于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;
 ????????????????????}
 ????????????????});
(编辑:安卓应用网_ASP源码网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|