oracle存储过程与函数的区别及作用,Oracle存储过程与存储函数-入门

be6d1bbebd03

文章思维导图

一. 存储过程和存储函数的定义

定义:存储在数据库中,供所有用户程序调用的子程序叫做存储过程/存储函数。复杂点的解释:存储过程(Stored Procedure),就是一组用于完成特定数据库功能的SQL 语句集,该SQL语句集经过编译后存储在数据库系统中。在使用时候,用户通过指定已经定义的存储过程名字并给出相应的存储过程参数来调用并执行它,从而完成一个或一系列的数据库操作。

区别:是否可以通过return返回函数值。

存储函数可以通过return返回函数值;而存储过程不可以。

注意:由于通过out参数,存储过程也可以返回函数值,所以存储过程和存储函数已经没有太大的区别了。而存储函数仍然存在,是由于oracle不断升级,需要实现向下兼容,所以存储函数就一直存留着。

二. 存储过程

1. 创建和使用存储过程

用create procedure命令建立存储过程,语法如下:

create [or replace] procedure 过程名(参数列表)

as -- as不可以省略

PLSQL子程序体;

注意事项:

1> 存储过程或者存储函数,只能创建或者替换。

2> 参数可以带也可以不带。

3> as相当于PLSQL语句中的declare,用来声明变量、游标等,但是不可以省略。

2. 入门案例:

(1)不带参数的存储过程:不用带括号

create or replace procedure sayHello

as

begin

dbms_output.put_line('HelloWorld');

end;

/

调用方式:

<1> 使用execute:

exec是sqlplus命令,只能在sqlplus中使用,使用时,exec可以直接跟过程名(可以省略括号);

控制台执行示例:

SQL> set serveroutput on;

SQL> exec sayHello;

<2> 使用call:

使用call时,要带上括号;call为SQL命令使用时,对场景没有限制。

控制台执行示例:

SQL> set serveroutput on;

SQL> call sayHello();

<3> 使用PLSQL语句调用:

控制台执行示例:

SQL> set serveroutput on;

SQL> begin

sayHello;

end;

/

(2)带参数的存储过程:

给指定的员工涨100元工资,并且打印涨前和涨后的薪水:

create or replace procedure addSal(pempno in emp.empno%type)

as

pename emp.ename%type;

beforesal emp.sal%type;

aftersal emp.sal%type;

begin

select ename,sal into pename,beforesal from emp where empno=pempno;

aftersal:=beforesal+100;

update emp set sal=aftersal where empno=pempno;

dbms_output.put_line('姓名: '||pename||' 涨前工资:'||beforesal||'涨后工资:'||aftersal);

end;

/

be6d1bbebd03

执行代码截图

** 注意事项:**

<1> 要说明,参数是输入参数(in)还是输出参数(out);

<2> 为保证调用多个存储过程中处在同一个事务中,所以一般不在存储过程或者存储函数中,commit或rollback;

3. 调试存储过程:

be6d1bbebd03

SQL Developer 调试存储过程

** 注意事项:**

(1) oracle数据库和PLSQL工具都是放在同一个机器上;

(2) 在开启调试时,可能会报出权限不够的错误信息,通过下面方式进行授权:

be6d1bbebd03

授权

三. 存储函数

1. 存储函数:

函数(Function)为一命名的存储程序,可带参数,并返回一计算值.

函数和过程的结构类似,但必须有一个return子句,用于返回函数值.

2. 创建存储函数的语法:

create [or replace] function 函数名(参数列表)

return 函数值类型

as

PLSQL子程序体;

注意事项:

(1) 与存储过程注意事项类似,不同的是,必须有个返回值;

(2) 参数列表可以有,也可以没有.当没有时,函数名后面不要带括号.

create or replace function queryempannal(pempno in number)

return number

as

psal emp.sal%type;

pcomm emp.comm%type;

begin

select sal,comm into psal,pcomm from emp where empno=pempno;

return psal*12+nvl(pcomm,0);

end;

四. in和out参数

1.概述

(1) 一般来讲,存储过程和存储函数的区别在于存储函数可以有一个返回值;而存储过程没有返回值.

(2) 过程和函数都可以通过out指定一个或多个输出参数.我们可以利用out参数,在过程和函数中实现返回多个值.

a. 存储过程和存储函数都可以有out参数;

b. 存储过程和存储函数都可以有多个out参数;

c. 存储过程可以通过out参数来实现返回值;

(3) 什么时候用存储过程/存储函数?

原则:如果只有一个返回值,用存储函数;否则,就用存储过程.

create or replace procedure queryempinform(eno in number,

pename out varchar2,

psal out number,

pjob out varchar2 )

as

begin

select ename,sal,job into pename,psal,pjob from emp where empno=eno;

end;

/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/359745.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CC++初学者编程教程(8) VS2013配置编程助手与QT

1. 2. 配置编程助手 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19&#xff0e; 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30&#xff0e; 31. 32&#xff0e; 33. 34. 35. 36. 37. 38. 39 40 41 42 43 这个时候我们就在VS2013里面集成了QT&#xff0c;编程助…

转子碰磨 matlab,航空科普:什么是航空发动机转子碰磨?

中国航空报讯&#xff1a;随着人们对航空发动机油耗、推重比等要求的逐步提高&#xff0c;提升航空发动机运行效率&#xff0c;尤其是提升民用航空发动机的经济性已经变得越来越重要。航空发动机的总体运行效率是气动效率、燃烧效率、冷却效率与机械效率等共同决定的。其中&…

Android 自定义 ListView 显示网络上 JSON 格式歌曲列表

本文内容 环境 项目结构 演示自定义 ListView 显示网络上 JSON 歌曲列表 参考资料 本文最开始看的是一个国人翻译的文章&#xff0c;没有源代码可下载&#xff0c;根据文中提供的代码片段&#xff0c;自己新建的项目&#xff08;比较可恶的是&#xff0c;没有图标图片资源&…

oracle 索引invisible,Oracle index unusable和invisible的区别

invisible index会被优化器所忽略&#xff0c;但是dml操作仍然会维护索引。在session或者system级别使用参数OPTIMIZER_USE_INVISIBLE_INDEX摘录自Oracle 11g的官方文档&#xff1a;UNUSABLE Specify UNUSABLE to mark the index or index partition(s) or index subpartition(…

php16进制密钥签名对接支付,简单理解rsa的加密和签名-PHP实现

我们先动手在linux上生成一下rsaPs&#xff1a;openssl是一堆加密算法和安全协议的开源集合,像RSA,DES,MD5,RC4等等,都能在openssl里面找到源代码.用openssl指定生成test.key文件&#xff0c;其中包含公钥私钥&#xff0c;1024为生成密钥长度tbtb:~/mimi$ openssl genrsa -out …

java中字符和字节的转换_Java最佳实践–字符到字节和字节到字符的转换

java中字符和字节的转换在使用Java编程语言时&#xff0c;我们将继续讨论与建议的实践有关的系列文章&#xff0c;我们将讨论String性能调优。 特别是&#xff0c;我们将着重于使用默认编码时如何有效地处理字符到字节和字节到字符的转换。 本文总结了两种建议的自定义方法与两…

Android实现简单短信发送器

布局&#xff1a; <RelativeLayout xmlns:android"http://schemas.android.com/apk/res/android"xmlns:tools"http://schemas.android.com/tools"android:id"id/container"android:layout_width"match_parent"android:layout_heigh…

linux 查看文件哈希码,使用linux的sha1sum命令查看效验文件哈希值命令

服务器今天小编给大家分享的是使用linux的sha1sum命令查看效验文件哈希值命令&#xff0c;相信很多人都不太了解&#xff0c;为了让大家更加了解&#xff0c;所以给大家总结了以下内容&#xff0c;一起往下看吧。一定会有所收获的哦。sha1sum命令用于生成和校验文件的sha1值。它…

Java中的传值与传引用

曾经对java中传值还是传引用的问题十分困惑&#xff0c;而且也被问到过许多次&#xff0c;无论是面试&#xff0c;还是平时我们平时的讨论中。 在stackoverflow上面浏览时&#xff0c;无意中发现了跟这个问题有关的论题&#xff0c;于是深入地查看了&#xff0c;感觉获益匪浅&a…

java高性能序列化_Java最佳实践–高性能序列化

java高性能序列化在使用Java编程语言时&#xff0c;我们将继续讨论与建议的实践有关的系列文章&#xff0c;我们将讨论并演示如何将对象序列化用于高性能应用程序。 所有讨论的主题均基于用例&#xff0c;这些用例源于电信行业关键任务超高性能生产系统的开发。 在阅读本文的…

linux进程属主6,20150917 Linux进程查看与管理以及作业管理

第一、基础知识MBR引导--内核--内核程序--》协调其它程序一般内核运行在硬件之上&#xff0c;各应用也在硬件之前1)OS的基本功能&#xff1a;文件系统、网络功能、进程管理、内存管理、驱动程序、安全功能以上为通用目的设置的程序。&#xff0c;程序指令数据&#xff0c;程序运…

在javaweb中通过servlet类和普通类读取资源文件

javaweb有两种方式读取资源文件 在Servlet中读取&#xff0c;可以使用servletContext&#xff0c;servletContext可以拿到web所有的资源文件&#xff0c;然后随便读&#xff0c;但是这种方法不常用&#xff0c;尽量少在Servlet中读取资源文件 在普通Java类中&#xff08;DAO中&…

数学图形(1.43)贝壳形曲线与鱼形曲线

贝壳形曲线 #http://curvebank.calstatela.edu/naturalcurves/slide7.jpgvertices 12000t from 0 to (2*PI)r 10*(0.7 2.6*cos(t) 1.3*pow(sin(90*t), 3))x r*sin(t) y r*cos(t) 鱼形曲线 #http://www.2dcurves.com/quartic/quarticfi.html vertices 1000 t from 0 to…

linux下编译ios,为iOS安装OpenCV

一&#xff0c;要求CMake 2.8.8 或者更高Xcode 4.2 或者更新二&#xff0c;从Git库取得最新的 OpenCV使用 git 客户端从 http://github.com/itseez/opencv clone Open 库。在 max os x 下&#xff0c;可以通过以下命令行完成cd ~/git clone https://github.com/Itseez/opencv…

学习使用资源文件[11] - DLL 中的资源文件

本例将把一张 bmp 图片, 以资源文件的方式嵌入 dll, 然后再调用.第一步: 建一个 DLL 工程, 如图:然后保存, 我这里使用的名称都是默认的.第二步: 建一个资源原文件, 如图:编辑内容如下(路径中的文件一定要存在):img1 BITMAP "c:\temp\test.bmp"然后, 取个名(后缀须是…

linux 自动安装 yum,LINUX6安装YUM仓库和实现开机自动挂载

# LINUX6安装YUM仓库和实现开机自动挂载---------------------------------安装环境-------------------------------Redhat6镜像文件&#xff1a;链接&#xff1a;https://pan.baidu.com/s/1DKH6adbrsipM-cTzH-wBgA 百度网盘 密码是hxcbVmware Workstation虚拟机工具&#x…

.NET Framework 4.0源代码

原文出处&#xff1a;http://blogs.microsoft.co.il/blogs/arik/archive/2010/07/12/step-into-net-framework-4-0-source-code.aspx 本文将向你展示如何配置Visual Studio 2010逐语句执行.NET Framework 4.0源代码。 为啥? 因为很酷。 因为能帮助调试。 你不仅能看到源代码…

linux blender骨骼绑定,在Linux系统中安装开源3D创建套件Blender的方法

Blender是免费的开源3D创建套件&#xff0c;它可在Linux系统中安装&#xff0c;可使用snap或flatpak命令安装Blender。简介Blender也称为开源3D建模软件&#xff0c;支持整个3D管道&#xff0c;建模&#xff0c;装配&#xff0c;动画&#xff0c;模拟&#xff0c;渲染&#xff…

配置源码管理工具(2)

源码管理是开发中最重要的事情之一&#xff0c;在vs.net里我们通常采用vss进行版本控制&#xff0c;在Eclipse里看帖子说用svn的比例很大&#xff0c;和IDE的集成性也很好。 1&#xff1a;服务器部署 下载地址是&#xff1a;http://subversion.apache.org/packages.html 下载的…

编写下载服务器。 第六部分:描述您发送的内容(内容类型等)

就HTTP而言&#xff0c;客户端下载的只是一堆字节。 但是&#xff0c;客户真的很想知道如何解释这些字节。 它是图像吗&#xff1f; 或者也许是ZIP文件&#xff1f; 本系列的最后一部分描述了如何向客户端提示她下载的内容。 设置 内容类型描述了要返回的资源的MIME类型 。 此…