oracle存储过程基本语法(二)

2014-11-24 08:46:35 · 作者: · 浏览: 3
据库中是否存在该记录,如果存在,再利用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 ;
}
} );