深入探讨Oracle数据库存储进程的若干问题ITeye环球 - 娱乐之横扫全球

深入探讨Oracle数据库存储进程的若干问题ITeye环球

2019-02-07 11:30:36 | 作者: 凌旋 | 标签: 进程,问题,运用 | 浏览: 573

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;

}

});



从:
https://www.sucai.com/Tech/List4/10801.htm
处,转载
版权声明
本文来源于网络,版权归原作者所有,其内容与观点不代表娱乐之横扫全球立场。转载文章仅为传播更有价值的信息,如采编人员采编有误或者版权原因,请与我们联系,我们核实后立即修改或删除。

猜您喜欢的文章