专业IT网络知识平台,分享IT百科知识、生活百科知识解答!

易企推科技
易企推科技

oracle存储过程是什么,oracle存储过程详解

来源:小易整编  作者:小易  发布时间:2023-03-17 04:33
摘要:oracle存储过程是什么,oracle存储过程详解1、定义所谓存储过程(StoredProcedure),就是一组用于完成特定数据库功能的SQL语句集,该SQL语句集经过编译后存储在数据库系统中。在使用时候,用户通过指定已经定义的存储过程...

1

2

3

4

5

6

7

8

9

IS

CURSORcur ISSELECT* FROMxxx;

BEGIN

FORcur_result incur LOOP

BEGIN

V_SUM :=cur_result.列名1+cur_result.列名2

END;

ENDLOOP;

END;

7. 带参数的cursor

1

2

3

4

5

CURSORC_USER(C_ID NUMBER) ISSELECTNAMEFROMUSERWHERETYPEID=C_ID;

OPENC_USER(变量值);

FETCHC_USER INTOV_NAME;

EXIT WHENFETCHC_USER%NOTFOUND;

CLOSEC_USER;

8. 用pl/sql developer debug

连接数据库后建立一个Test WINDOW,在窗口输入调用SP的代码,F9开始debug,CTRL+N单步调试

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

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

1

2

selecta.appname fromappinfo a;-- 正确

selecta.appname fromappinfo asa;-- 错误

也许,是怕和oracle中的存储过程中的关键字as冲突的问题吧

2.在存储过程中,select某一字段时,后面必须紧跟into,如果select整个记录,利用游标的话就另当别论了。

1

2

3

4

selectaf.keynode intokn fromAPPFOUNDATION af

whereaf.appid=aid andaf.foundationid=fid;-- 有into,正确编译

selectaf.keynode fromAPPFOUNDATION af

whereaf.appid=aid andaf.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.在存储过程中,别名不能和字段名称相同,否则虽然编译可以通过,但在运行阶段会报错

1

2

3

4

5

6

--正确

selectkeynode intokn fromAPPFOUNDATION whereappid=aid andfoundationid=fid;

--错误

selectaf.keynode intokn fromAPPFOUNDATION af

whereaf.appid=appid andaf.foundationid=foundationid;

-- 运行阶段报错,提示ORA-01422:exact fetch returns more than requested number of rows

5.在存储过程中,关于出现null的问题

假设有一个表A,定义如下:

1

2

3

4

5

createtableA(

id varchar2(50) primarykeynotnull,

<a class="keylink"href="https://www.2cto/kf/ware/vc/"target="_blank">

vcount number(8) notnull,

bid varchar2(50) notnull-- 外键

);

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

1

selectsum(vcount) intofcount fromA wherebid='xxxxxx';

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

1

2

3

if fcount isnullthen

fcount:=0;

endif;

这样就一切ok了。

6.Hibernate调用oracle存储过程

1

2

3

4

5

6

7

8

9

10

11

12

this.pnumberManager.getHibernateTemplate().execute(

new HibernateCallback() {

publicObject doInHibernate(Session session)

throws HibernateException, SQLException {

CallableStatement cs = session

.connection()

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

cs.setString(1, foundationid);

cs.execute();

returnnull;

}

});


本文地址:IT问答频道 https://www.hkm168.com/itwenda/930785_3.html,易企推百科一个免费的知识分享平台,本站部分文章来网络分享,本着互联网分享的精神,如有涉及到您的权益,请联系我们删除,谢谢!

共3页 1 2 3 当前是最后一页

IT问答
小编:小易整编
相关文章相关阅读
  • 计算机的内存储器是指什么

    计算机的内存储器是指什么

    计算机的内存储器是指rom和ram。内存储器是计算机的重要部件之一,它是外存储器与cpu进行沟通的桥梁,计算机中所有程序的运行都在内存中进行。本教程操作环境:windows7系统、DellG3电脑。计算机的内存储器是指ROM和RAM。(相...

  • 什么是oracle awr

    什么是oracle awr

    awr是指“自动工作量资料档案库”,是oracle数据库用于收集、管理和维护数据库整个运行期间和性能相关统计数据的存储仓库,是oracle数据库性能调整和优化的基础。awr收集到的数据会被定期保存到磁盘,可以从数据字典查询以及生成性能报告。...

  • oracle中nvl函数的用法是什么

    oracle中nvl函数的用法是什么

    在oracle中,nvl()函数用于从两个表达式返回一个非null值,语法为“nvl(表达式1,表达式2)”;若表达式1的计算结果为null值,则该函数返回表达式2的结果,若表达式1的计算结果不是null值,则返回表达式1的结果。本教程操作...

  • 创建存储过程 mysql

    创建存储过程 mysql

    mysql是一款流行的开源关系数据库管理系统,在处理大量数据时表现出色。存储过程是一种可重复使用的代码块,它们可以与数据表交互,并可以在查询中调用。本文将介绍如何创建存储过程,以及如何在MySQL中调用和使用它们。一、创建存储过程在...

  • 微型计算机存储系统中prom是什么

    微型计算机存储系统中prom是什么

    微型计算机存储系统中的prom是指可编程只读存储器,是一种可以用程序操作的只读内存;主要的特征是只允许数据写入一次,如果数据输入错误只能报废。这种存储器用作永久存放程序之用。本教程操作环境:windows7系统、DellG3电脑。PROM...

  • oracle的函数有哪些

    oracle的函数有哪些

    oracle的函数有:1、字符串函数,包括ascii()、concat()等;2、数字函数,包括abs()、cos()等;3、日期函数,包括extract()、round()等;4、转换函数,包括to_char()、to_date()等。本...

  • 数据存储基础单位是什么

    数据存储基础单位是什么

    计算机进行数据存储的基本单位是字节。1、字节字节是计算机数据处理的基本单位。1个字节由个二进制位组成,常用B表示。在计算机和其他的数字设备中,一般用字节作为存储容量的基本单位。除了B(字节)外,还有KB(千字节)、MB(兆字节)、GB(吉字...

  • oracle服务有哪些

    oracle服务有哪些

    oracle服务有七大块:1、卷映射拷贝写入服务,可以在多卷或者单个卷上创建映射拷贝,同时不会影响到系统的系统能;2、数据库控制台服务,在运行企业管理器oem时需要启动该服务;3、服务端控制服务,可作为事务的资源管理器;4、监听器服务等等。...

  • 周排行
  • 月排行
  • 年排行

精彩推荐