加入收藏 | 设为首页 | 会员中心 | 我要投稿 安卓应用网_ASP源码网 (https://www.1asp.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长百科 > 正文

oracle存错过程的基本语法

发布时间:2021-01-04 08:10:25 所属栏目:站长百科 来源:网络整理
导读:? 存储过程 1??CREATE?OR?REPLACE?PROCEDURE?存储过程名 2??IS 3??BEGIN 4??NULL; 5??END; ? 行1: CREATE?OR?REPLACE?PROCEDURE?是一个SQL语句通知Oracle数据库去创建一个叫做skeleton存储过程,?如果存在就覆盖它; 行2: IS关键词表明后面将跟随一个PL/SQL

?

关于oracle存储过程的若干问题备忘

1.在oracle中,数据表别名不能加as,如:

oracle存错过程的基本语法

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

oracle存错过程的基本语法

select?a.appname?from?appinfo?as?a;--?错误 ?也许,是怕和oracle中的存储过程中的关键字as冲突的问题吧 2.在存储过程中,select某一字段时,后面必须紧跟into,如果select整个记录,利用游标的话就另当别论了。

oracle存错过程的基本语法

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

oracle存错过程的基本语法

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

oracle存错过程的基本语法

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

oracle存错过程的基本语法


oracle存错过程的基本语法

3.在利用select...into...语法时,必须先确保数据库中有该条记录,否则会报出"no data found"异常。
?? 可以在该语法之前,先利用select count(*) from?查看数据库中是否存在该记录,如果存在,再利用select...into... 4.在存储过程中,别名不能和字段名称相同,否则虽然编译可以通过,但在运行阶段会报错

oracle存错过程的基本语法

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

oracle存错过程的基本语法

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

oracle存错过程的基本语法

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

oracle存错过程的基本语法

5.在存储过程中,关于出现null的问题
假设有一个表A,定义如下:

oracle存错过程的基本语法

create?table?A(

oracle存错过程的基本语法

id?varchar2(50)?primary?key?not?null,

oracle存错过程的基本语法

vcount?number(8)?not?null,

oracle存错过程的基本语法

bid?varchar2(50)?not?null?--?外键?

oracle存错过程的基本语法

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

oracle存错过程的基本语法

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

oracle存错过程的基本语法

if?fcount?is?null?then

oracle存错过程的基本语法

????fcount:=0;

oracle存错过程的基本语法

end?if; 这样就一切ok了。 6.Hibernate调用oracle存储过程

oracle存错过程的基本语法

????????this.pnumberManager.getHibernateTemplate().execute(

oracle存错过程的基本语法

????????????????new?HibernateCallback()? {

oracle存错过程的基本语法

????????????????????public?Object?doInHibernate(Session?session)

oracle存错过程的基本语法

????????????????????????????throws?HibernateException,?SQLException?{

oracle存错过程的基本语法

????????????????????????CallableStatement?cs?=?session

oracle存错过程的基本语法

????????????????????????????????.connection()

oracle存错过程的基本语法

????????????????????????????????.prepareCall("{call?modifyapppnumber_remain(?)}");

oracle存错过程的基本语法

????????????????????????cs.setString(1,?foundationid);

oracle存错过程的基本语法

????????????????????????cs.execute();

oracle存错过程的基本语法

????????????????????????return?null;

oracle存错过程的基本语法

????????????????????}

oracle存错过程的基本语法

????????????????});

(编辑:安卓应用网_ASP源码网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

推荐文章
    热点阅读