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

2016-02-19 21:11 3 1 收藏

在这个颜值当道,屌丝闪边的时代,拼不过颜值拼内涵,只有知识丰富才能提升一个人的内在气质和修养,所谓人丑就要多学习,今天图老师给大家分享关于Oracle存储过程的若干问题备忘,希望可以对大家能有小小的帮助。

【 tulaoshi.com - 编程语言 】

  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,

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/bianchengyuyan/)

  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(?)}");

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/bianchengyuyan/)

   cs.setString(1, foundationid);

   cs.execute();

   return null;

  }

 });

来源:https://www.tulaoshi.com/n/20160219/1625500.html

延伸阅读
标签: SQLServer
 一个bt主任的要求 值班管理  要求如下 1 一组队列  n 个人, 有4种角色,领导,汉子,大妈,司机。n个人根据自己角色按顺序排好队 2 值班要求:周一到周日 1个领导值班1个司机值班;周一到周日 每晚1个汉子 值班;周六 周日 上午下午2个大妈值班;假期每天1个领导1个司机1个汉子上午下午2个大妈 3 要求队列可增删查该 ,人员...
标签: PHP
  PHP程序访问数据库,完全可以使用存储过程,有人认为使用存储过程便于维护 不过仁者见仁,智者见智,在这个问题上,偶认为使用存储过程意味着必须要DBA和开发人员更紧密配合,如果其中一方更变,则显然难以维护。 但是使用存储过程至少有两个最明显的优点:速度和效率。 使用存储过程的速度显然更快。 在效率上,如果应用一次需要做一系...
标签: ASP
  综述: 在这篇文章里 豆腐 简单扼要的讲了一下在asp+编程中我们可能要遇到的问题以及遇到这些问题的解决方法,相信大家 在 看完这篇文章以后,对于asp+的编程就会觉得是非常的 简单,我在这篇文章文章中主要讲了一些比较中级的应用,如果您对于asp+目前还是处于入门阶段,建议您去 1 如何使用 asp+ 获取提交的form元素 我们首先来利用...
方法1: X:\oracle\ora81\bin\wrap   iname=XXX   oname=XXX    方法2:9i在win2000下使用wrap加密存储过程,10g可以用加密包dbms_ddl.wrap或dbms_ddl.create_wrapped。 11.5.1 在win2000下使用wrap加密存储过程 wrap.bat rem 使用方法:wrap 待加密的文件名 set ...
标签: Web开发
建立一个 Web 应用,分页浏览功能必不可少。这个问题是数据库处理中十分常见的问题。经典的数据分页方法是:ADO 纪录集分页法,也就是利用ADO自带的分页功能(利用游标)来实现分页。但这种分页方法仅适用于较小数据量的情形,因为游标本身有缺点:游标是存放在内存中,很费内存。游标一建立,就将相关的记录锁住,直到取消游标...

经验教程

437

收藏

66
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部