当前位置: 代码迷 >> 综合 >> SQL必知必会(19)——使用存储过程
  详细解决方案

SQL必知必会(19)——使用存储过程

热度:110   发布时间:2023-10-01 23:27:30.0

1、存储过程

存储过程(Stored Procedure)就是为以后使用而保存的一条或多条SQL语句。可将其视为皮文件,虽然他们的作用不仅限于批处理

2、为什么要使用存储过程

  • 通过把处理封装在一个易用的单元中,可以简化复杂的操作。
  • 由于不要求反复建立一系列处理步骤,因而保证了数据的一致性。如果所有开发人员和应用程序都使用同一存储过程,则所使用的代码时相同的。这一点的延伸就是防止错误,需要执行的步骤越多,出错的可能性就越大
  • 简化对变动的管理。如果表名,列名或业务逻辑有变化,那么只需要更改存储过程的代码。使用它的人员甚至不需要知道这些变化。这点的延伸就是安全性。通过存储过程限制对基础数据的访问,减少了数据讹误的机会
  • 因此存储过程通常以编译过的形式存储,所以DBMS处理命令所需的工作量少,提高了性能。
  • 存在一些只能用在单个请求中的SQL元素和特性,存储过程可以使用他们来编写功能更强更灵活的代码。
  • 换句话说,使用存储过程有三个主要的好处,即简单,安全,高性能

缺点:

  • 不同DBMS中存储过程语法有所不同。事实上,编写真正的可移植存储过程几乎是不可能的
  • 一般来说,编写存储过程比编写基本SQL语句复杂,需要更高的技能,更丰富的经验。

3、执行存储过程

EXCUTE Addnewproduct ('JTS01','Stuffed Eiffel Tower',6.49'plush stuffed toy with the next la tour eiffel in red white and blue');
--这里执行一个名为addnewproduct的存储过程,将一个新产品添加到product表中。addnewproduct有四个参数,分别是:
供应商id(vendors表的主键),产品名,价格和描述。

4、创建存储过程

CREATE PROCEDUKE MailingListCount(Listcount out integer
)
is
v_rows integer;
beginselect count(*) into v_rowsfrom customerswhere not cust_email is null;listcount :=v_rows;end;--这个存储过程有一个名为listcount的参数。此参数从存储过程返回一个值而不是传递一个值给存储过程。关键字out用来指示这种行为。oracle支持in(传递值给存储过程),out(从存储过程返回值,如这里),inout(既传递值给存储过程也从存储过程返回值)类型的参数。存储过程的代码在begin和end语句中,这里执行一条简单的select语句,他检索具有邮箱地址的顾客。然后用检索出的行数设置ListCount(要传递的输出类型)

 

  相关解决方案