您在这里:首页 > 学员专区 > 技术文章
Oracle视频
Oracle
CUUG课程

关于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;

               }

           });


(文章来自网络,如有侵权请来信告知,本站将在第一时间删除。)

相关文章 [上一篇] Oracle存储过程的基本语法
010-88589926(88587026)
CUUG热门培训课程
Oracle DBA就业培训
CUUG名师
网络课程
技术沙龙
最新动态

总机:(010)-88589926,88589826,88587026 QQ讨论群:243729577 182441349 邮箱:cuug_bj@cuug.com
通信地址:北京市海淀区紫竹院路98号北京化工大学科技园609室(CUUG)邮政编码:100089 
中国UNIX用户协会 Copyright 2010  ALL Rights Reserved 北京神脑资讯技术有限公司
京ICP备11008061号  京公网安备110108006275号