定义:
存储过程(Stored Procedure )是一组为了完成特定功能的SQL 语句集,经编译后存储在数据库中。用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。存储过程是数据库中的一个重要对象,任何一个设计良好的数据库应用程序都应该用到存储过程。 存储过程是由流控制和SQL 语句书写的过程,这个过程经编译和优化后存储在数据库服务器中,应用程序使用时只要调用即可。在Oracle 中,若干个有联系的过程可以组合在一起构成程序包。
存
优点:
- 执行速度快:存储过程只在创建时进行编译,以后每次执行存储过程都不需要重新编译,而一般SQL语句没执行一次就需编译一次,所以使用存储过程可提高数据库的执行速度。
- 减少网络通信量:当对数据库进行复杂操作时,(如对多个表进行insert、update、select、delete时)可将这些复杂操作用存储过程封装起来与数据库提供的事务处理结合一起使用。这些操作,如果用程序完成就是多条SQL语句,可能要多次连接数据库,而换成存储过程只需一次连接。
- 更强的适应性与复用性:增强了SQL语句的功能和灵活性
- 增强了使用的安全性:避免了sql注入,且使没有权限的用户在控制之下间接地存取数据库,从而保证数据的安全。
- 可以实现集中控制:当规则发生改变时,只需要修改存储过程就可以啦,便于现场维护。
缺点:
- 调试不是很方便:不能像代码一样debug调试,plsql中的测试功能可以查询到的中间数据仅限于一些变量
- 创建存储过程权限问题:需要用户具有存储过程相关权限
- 移植性问题(致命缺陷): 面向对象的思维在存储过程这毫无用武之地,两个很相似的功能在也需要两个存储过程,因为他们是互相独立的,可以互相调用,但是不能继承等面向对象的操作,这也就增加了代码量。不同数据库类型语法不同,需要迁移时,需要大量时间。
适用场景:
报表出表逻辑