Chinaunix首页 | 论坛 | 博客
  • 博客访问: 4464749
  • 博文数量: 1148
  • 博客积分: 25453
  • 博客等级: 上将
  • 技术积分: 11949
  • 用 户 组: 普通用户
  • 注册时间: 2010-05-06 21:14
文章分类

全部博文(1148)

文章存档

2012年(15)

2011年(1078)

2010年(58)

分类: Mysql/postgreSQL

2011-08-08 08:46:27

1. 什么是存储过程??
   存储过程 (stored procedure)是一组为了完成特定功能的sql语句集,经编译后存储在数据库中。由于sql语句执行的时候要先编译,然后执行,用户通过制定存储
过程的名字并给出参数来执行它。

 

2. 存储过程的语法

  1. mysql> ? create procedure;
  2. Name: 'CREATE PROCEDURE'
  3. Description:
  4. Syntax:
  5. CREATE
  6.     [DEFINER = { user | CURRENT_USER }]
  7.     PROCEDURE sp_name ([proc_parameter[,...]])
  8.     [characteristic ...] routine_body

  9. CREATE
  10.     [DEFINER = { user | CURRENT_USER }]
  11.     FUNCTION sp_name ([func_parameter[,...]])
  12.     RETURNS type
  13.     [characteristic ...] routine_body
 
 使用drop 语句销毁一个存储过程或函数的语法

drop { procedure | function} [if exists ] sp_name


3. 存储过程的使用

   数据库存储过程的实质就是部署在数据库端的一组定义代码以及sql。将常用的或很复杂的工作,预先用sql语句写好并用一个指定的名称存储起来,那么以后要让数据库提供与已定义好的存储过程的功能相同的服务时,只需调用即可自动完成命令。

   例如,创建存储过程 sp_demo:

create procedure ordertotal(in  onumber int,
                             out ototal decimal(8,2))
begin
     select sum(item_price*quantity) from ordertiems
     where order_num = onumber into ototal;
end;

    这是 一个带in 和 out参数的存储过程,in用于表明此值是用于从存储过程里输入的,而out用于表明此值是用于从存储过程里输出的。begin。。end 之间是存储过程的主体定义,使用分号 ; 作为分隔符。


    调用存储过程的方法比较简单,使用 call 语句即可。
cal sp_name([parameter[...]])

    call 语句调用一个先前用 create procedure 创建的存储过程。call 语句可以用声明为out或in的参数给它的调用者传回值。他也‘返回’受影响的行数,客户端程序可以在sql级别通过调用 row_count() 函数获得这个数,在c语言中是调用 c api 函数 mysql_affected_rows()来获得。


    注意,如果存储过程没有参数,即不用传递参数,存储过程名字后面的括号‘()’ 页必须要有。


   例如,我们可以这样调用刚才创建的存储过程 ordertotal:

   call ordertotal(10,@total)

  使用select语句获取 @total值
  select @total


   在存储过程中使用流程控制语句的方法与一般编程语句类似,每个流程分支包含要么是一个单独语句,要么是使用begin。。end复合语句的一块语句。


 
阅读(1022) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~