0

0

oracle中存储过程与函数的区别是什么

青灯夜游

青灯夜游

发布时间:2022-02-22 18:38:55

|

9543人浏览过

|

来源于php中文网

原创

区别:1、存储过程用于在数据库中完成特定的操作或任务,而函数用于特定数据;2、存储过程的程序头部声明用PROCEDURE,声明时不需要返回类型,而函数的程序头部声明用FUNCTION,声明时要描述返回类型。

oracle中存储过程与函数的区别是什么

本教程操作环境:Windows7系统、Oracle 11g版、Dell G3电脑。

存储过程

存储过程(Stored Procedure )是一组为了完成特定功能的SQL 语句集,经编译后存储在数据库中。用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。存储过程是数据库中的一个重要对象,任何一个设计良好的数据库应用程序都应该用到存储过程。 存储过程是由流控制和SQL 语句书写的过程,这个过程经编译和优化后存储在数据库服务器中,应用程序使用时只要调用即可。在ORACLE 中,若干个有联系的过程可以组合在一起构成程序包。

优 点:

1、存储过程只在创造时进行编译,以后每次执行存储过程都不需再重新编译,而一般SQL语句每执行一次就编译一次,所以使用存储过程可提高数据库执行速度。

2、当对数据库进行复杂操作时(如对多个表进行Update、Insert、Query、Delete时),可将此复杂操作用存储过程封装起来与数据库提供的事务处理结合一起使用。

3、存储过程可以重复使用,可减少数据库开发人员的工作量。

4、安全性高,可设定只有某用户才具有对指定存储过程的使用权。

存储过程与函数的区别

二者最大的区别是:

1).函数(function)总是向调用者返回数据,并且一般只返回一个值;2).存储过程(procedure)不直接返回数据,但可以改变输出参数的值,这可以近似看作能返回值,且存储过程输出参数的值个数没有限制。

从一般应用上来看,如果不需要返回值或者需要多个返回值,使用存储过程,如果只用一个返回值,就使用函数。

2、function定义中只能有DDL(如select等)语句;procedure中主要是DML语句(对数据库进行复杂操作时,如对多个表进行Update、Insert、Query、Delete时)。

如果想要使用select的结果集,则要使用游标

存储过程与函数的区别

存储过程

函数

用于在数据库中完成特定的操作或任务(如插入、删除等)

用于特定数据(如查询返回值)

程序头部声明用PROCEDURE

程序头部声明用FUNCTION

程序头部声明时不需要返回类型

程序头部声明时要描述返回类型,而且PL/SQL块至少要包括一个有效的RETURN语句

可以使用IN/OUT/IN OUT3种参数模式

可以使用IN/OUT/IN OUT3种参数模式

可以作为独立的PL/SQL语句执行

Python函数 文件与模块 中文WORD版
Python函数 文件与模块 中文WORD版

本文档主要讲述的是Python 函数、文件与模块,本文构造一个完整的 Python 程序。引入了 Python 函数和模块,并展示了构建一个 Python 程序、将其存储在文件中以及通过命令行运行该程序的方法;希望本文档会给有需要的朋友带来帮助;感兴趣的朋友可以过来看看

下载

不能独立执行,必须作为表达式的一部分调用

可以通过OUT/IN OUT返回零个或多个值

对过RETURN语句返回一个值,且该值与声明部分一致,也可以通过OUT类型的参数带出变量

SQL语句(DML或SELECT)中不可以调用存储过程

SQL语句(DML或SELECT)中可以调用函数

1.png

实际举例

1、函数

(1)创建函数

create or replace function get_salary(
    dept_no number,
    emp_count **out** number)
    return number IS
    v_sum number;begin
    ...exception    ...end get_salary

(2)调用函数

declare 
    v_num number;
    v_sum number;begin
    ...(这里应该出现函数名表示调用)end

2、存储过程

(1)创建存储过程

create or replace procedure pro_demo(
    dept_no number default 10,
    sal_sum out number,
    emp_count out number)
IS
begin
    ...
exception
    ...
end proc_demo;

(2)调用存储过程

调用语法:

1)、exec ;

2)、execute ;

3)、在PL/SQL语句块中直接调用。

例如:    

declare
    v_num number;
    v_sum number(8,2);
begin
    procedure pro_demo(dept_no=>1,sal_num=>900,emp_count=>10)(这里出现存储过程名表示调用,传递参数值用=>)
end;

3、本地存储过程

在PL/SQL中还可以在declare块中建立本地存储过程,而不使用关键字create,其目的是:不用将存储过程存储在数据库中,避免更改数据库时带来的麻烦,其主要的使用场景是,临时使用某个存储过程,而不是在以后要重复多次使用。

例子:

declare
    v_num number;
    v_sum number(8,2);
procedure proc_demo(
    dept_no number default 10,
    sal_sum out number,
    emp_count out number)
IS
begin
    ...(这里不用出现存储过程名)
exception
    ...
end proc_demo;

推荐教程:《Oracle教程

相关专题

更多
C++ 高级模板编程与元编程
C++ 高级模板编程与元编程

本专题深入讲解 C++ 中的高级模板编程与元编程技术,涵盖模板特化、SFINAE、模板递归、类型萃取、编译时常量与计算、C++17 的折叠表达式与变长模板参数等。通过多个实际示例,帮助开发者掌握 如何利用 C++ 模板机制编写高效、可扩展的通用代码,并提升代码的灵活性与性能。

10

2026.01.23

php远程文件教程合集
php远程文件教程合集

本专题整合了php远程文件相关教程,阅读专题下面的文章了解更多详细内容。

29

2026.01.22

PHP后端开发相关内容汇总
PHP后端开发相关内容汇总

本专题整合了PHP后端开发相关内容,阅读专题下面的文章了解更多详细内容。

21

2026.01.22

php会话教程合集
php会话教程合集

本专题整合了php会话教程相关合集,阅读专题下面的文章了解更多详细内容。

21

2026.01.22

宝塔PHP8.4相关教程汇总
宝塔PHP8.4相关教程汇总

本专题整合了宝塔PHP8.4相关教程,阅读专题下面的文章了解更多详细内容。

13

2026.01.22

PHP特殊符号教程合集
PHP特殊符号教程合集

本专题整合了PHP特殊符号相关处理方法,阅读专题下面的文章了解更多详细内容。

11

2026.01.22

PHP探针相关教程合集
PHP探针相关教程合集

本专题整合了PHP探针相关教程,阅读专题下面的文章了解更多详细内容。

8

2026.01.22

菜鸟裹裹入口以及教程汇总
菜鸟裹裹入口以及教程汇总

本专题整合了菜鸟裹裹入口地址及教程分享,阅读专题下面的文章了解更多详细内容。

55

2026.01.22

Golang 性能分析与pprof调优实战
Golang 性能分析与pprof调优实战

本专题系统讲解 Golang 应用的性能分析与调优方法,重点覆盖 pprof 的使用方式,包括 CPU、内存、阻塞与 goroutine 分析,火焰图解读,常见性能瓶颈定位思路,以及在真实项目中进行针对性优化的实践技巧。通过案例讲解,帮助开发者掌握 用数据驱动的方式持续提升 Go 程序性能与稳定性。

9

2026.01.22

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
SQL 教程
SQL 教程

共61课时 | 3.5万人学习

Java 教程
Java 教程

共578课时 | 50.2万人学习

oracle知识库
oracle知识库

共0课时 | 0人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号