定义:

存储过程(Stored Procedure )是一组为了完成特定功能的SQL 语句集,经编译后存储在数据库中。用户通过指定存储过程的名字并给出参数(如果该存储过程

带有参数)来执行它。

存储过程是数据库中的一个重要对象,任何一个设计良好的数据库应用程序都应该用到存储过程。

存储过程是由流控制和SQL 语句书写的过程,这个过程经编译和优化后存储在数据库服务器中,应用程序使用时只要调用即可。

在Oracle 中,若干个有联系的过程可以组合在一起构成程序包。

优 点:

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

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

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

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

存储过程与函数的对比

存储过程的优缺点

优点:减少网络交互的成本。
缺点:
a、不可移植性,每种数据库的内部编程语法都不太相同,当你的系统需要兼容多种数据库时,最好不要用存储过程。
b、学习成本高,DBA一般都擅长写存储过程,但并不是每个程序员都能写好存储过程,除非你的团队有较多的开发人员熟悉写存储过程,否则后期系统维护会产生问题。
c、业务逻辑多处存在,采用存储过程后也就意味着你的系统有一些业务逻辑不是在应用程序里处理,这种架构会增加一些系统维护和调试成本。
d、存储过程和常用应用程序语言不一样,它支持的函数及语法有可能不能满足需求,有些逻辑就只能通过应用程序处理。
e、如果存储过程中有复杂运算的话,会增加一些数据库服务端的处理成本,对于集中式数据库可能会导致系统可扩展性问题。
f、为了提高性能,数据库会把存储过程代码编译成中间运行代码(类似于Java的class文件),所以更像静态语言。当存储过程引用的对像(表、视图等等)结构改变后,
存储过程需要重新编译才能生效,在24*7高并发应用场景,一般都是在线变更结构的,所以在变更的瞬间要同时编译存储过程,这可能会导致数据库瞬间压力上升引起故障(oracle数据库就存在这样的问题)。

Oracle存储过程procedure与函数function区别相关推荐

  1. oracle package 函数,Oracle 存储过程procedure,函数function用法,以及package用法

    定义包头: create or replace package ex is procedure get_user_name(userid in emp.empno%type) : function g ...

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

    文章思维导图 一. 存储过程和存储函数的定义 定义:存储在数据库中,供所有用户程序调用的子程序叫做存储过程/存储函数.复杂点的解释:存储过程(Stored Procedure),就是一组用于完成特定数 ...

  3. Oracle存储过程和自定义函数

    概述 Oracle-procedure解读 Oracle存储过程和自定义函数 PL/SQL中的过程和函数(通常称为子程序)是PL/SQL块的一种特殊的类型,这种类型的子程序可以以编译的形式存放在数据库 ...

  4. Oracle存储过程和存储函数创建

    select * from emp; -----------------存储过程------------------------ --定义create[or replace] procedure 存储 ...

  5. 【存储过程】MySQL存储过程/存储过程与自定义函数的区别

    ---------------------------存储过程-------------------- 语法: 创建存储过程: CREATE [definer = {user|current_user ...

  6. oracle写完存储过程之后,oracle存储过程和自定义函数

    create [or replace] PRocedure 过程名(参数列表) AS PLSQL 子程序体; 存储过程写完之后,要调用这个存储过程; 有两种方法: 1.exec 存储过程名(); 2. ...

  7. mysql存储过程自定义结构体_(转)MySQL存储过程/存储过程与自定义函数的区别...

    转自:http://www.cnblogs.com/caoruiy/p/4486249.html 语法: 创建存储过程: CREATE[definer = {user|current_user}] P ...

  8. mysql存储过程和自定义函数_MySQL存储过程/存储过程与自定义函数的区别

    语法: 创建存储过程: CREATE[definer = {user|current_user}] PROCEDURE sp_name ([ proc_parameter [,proc_paramet ...

  9. Oracle存储过程procedure in、out、in out 模式参数【不发布,纯转】

    Oracle存储过程procedure in.out.in out 模式参数 Oracle存储过程基本语法介绍 注意存过不会自动提交,需要在存过本身添加commit; rollback;等语句 转载于 ...

最新文章

  1. ****65.磁盘阵列RAID
  2. 高通平台耳机插拔检测
  3. java中队列链表栈的作用_Java用链表实现栈和队列
  4. leetcode 200. Number of Islands | 200. 岛屿数量(Java)
  5. Java GregorianCalendar getActualMaximum()方法与示例
  6. could not open extension control file “/usr/share/postgresql/9.1/extension/dblink.control“
  7. 第 5 章 虚拟机栈
  8. 变电站计算机监控系统相关技术,变电站计算机监控系统的研究
  9. Bailian4136 矩形分割【差分】
  10. java 面试常问问题
  11. 开发基于大数据平台的搜索引擎
  12. 初中毕业也能月薪过万!5个质量极高的教程网站,免费献给你
  13. IIS导入SSL证书
  14. python第八天 运算符的使用
  15. 'rm' 不是内部或外部命令,也不是可运行的程序 或批处理文件。
  16. html submit没有提交数据
  17. 计算机音乐谱大全好汉歌,吉他曲谱好汉歌_《好汉歌》的吉他乐谱
  18. 京东获取商品历史价格信息 API接口
  19. 三次方分解因式重要公式
  20. 国科大《自然语言处理》复习(宗成庆老师)

热门文章

  1. Ubuntu 安装和修改Apache2端口
  2. AB1601 PWM模块
  3. c++新特性11 (12)weak_ptr类定义
  4. EOS 智能合约源代码解读 (10)token合约“几种关键操作”
  5. [密码学] 双重与三重DES
  6. 【python】数据结构与算法之二分查找
  7. [architecture]-spin_unlock中是怎样让cpu退出standby模式的?
  8. [crypto]-51-RSA私钥pem转换成der, 在将der解析出n e d p q dp dq qp
  9. kali2.0部署docker
  10. MFC控件的绘制与响应顺序——ZOrder