mysql procedure

用MySQL命令行首先要

delimiter //

mysql 客户端delimiter命令来把语句定界符从 ;变为//。这就允许用在程序体中的;定界符被传递到服务器而不是被mysql 自己来解释。

 

create procedure procedure_t_a_1(out size int)
begin
    select count(*) into size from t_a;
end
//
 

mysql> call procedure_t_a_1(@a);
    -> //
Query OK, 0 rows affected (0.00 sec)

mysql> select @a;
    -> //
+------+
| @a   |
+------+
| 3    |
+------+
1 row in set (0.00 sec)

 

 

CREATE FUNCTION hello (s CHAR(20)) RETURNS CHAR(50)
RETURN CONCAT('Hello, ',s,'!');
//

 

是returns,注意

 

select hello('hello');
//

 

+----------------+
| hello('hello') |
+----------------+
| Hello, hello!  |
+----------------+
1 row in set (0.01 sec)

mysql> drop procedure procedure_t_a_1//
Query OK, 0 rows affected (0.09 sec)

mysql> drop function hello//
Query OK, 0 rows affected (0.00 sec)

重新create前两个procedures和function

mysql> show create procedure procedure_t_a_1\G
*************************** 1. row ***************************
       Procedure: procedure_t_a_1
        sql_mode: NO_AUTO_CREATE_USER
Create Procedure: CREATE DEFINER=`root`@`localhost` PROCEDURE `procedure_t_a_1`(
out size int)
begin    select count(*) into size from t_a;end
1 row in set (0.00 sec)

mysql> show create function hello\G
*************************** 1. row ***************************
       Function: hello
       sql_mode: NO_AUTO_CREATE_USER
Create Function: CREATE DEFINER=`root`@`localhost` FUNCTION `hello`(s CHAR(20))
RETURNS char(50) CHARSET utf8
RETURN CONCAT('Hello, ',s,'!')
1 row in set (0.00 sec)

 

mysql> show function status like 'hello'\G
*************************** 1. row ***************************
           Db: test
         Name: hello
         Type: FUNCTION
      Definer: root@localhost
     Modified: 2010-07-15 21:22:37
      Created: 2010-07-15 21:22:37
Security_type: DEFINER
      Comment:
1 row in set (0.04 sec)
 

 

把t_b表的内容插入到t_a中,可以用

insert into t_a(id,value) select id,value from t_b;

 或者直接插入值

insert into t_a(id,value) values (6,'a6'),(7,'a7');

 

 

往表中插入n条记录,用存储过程

CREATE PROCEDURE procedure_t_a_insert(IN size int)
BEGIN
  DECLARE myIndex int default 0;
  DECLARE max_id int DEFAULT 1;
  select max(id) into max_id from t_a;
  select max_id;
  repeat
   insert into t_a values (max_id+1, concat('v_',(max_id+1)) );
   set myIndex = myIndex + 1;
   set max_id = max_id + 1;
  until (myIndex>=size) end repeat;
END;
 

传入一个数字,想插入多少条就插入多少条

call procedure_t_a_insert(2);
 

成功插入!

 

修改后

 

CREATE PROCEDURE procedure_t_a_insert(IN size int)
BEGIN
  DECLARE myIndex int default 0;
  DECLARE max_id int DEFAULT 1;
  select max(id) into max_id from t_a;
  select max_id;
  repeat
   insert into t_a values (max_id+1, concat('v_',(max_id+1)) );
   set myIndex = myIndex + 1;
   set max_id = max_id + 1;
  until (myIndex>=size) end repeat;
END;
--
drop procedure procedure_t_a_insert;
call procedure_t_a_insert(12);
--
 

分页查询

 

create procedure procedure_t_a_fenye(in currentPage int,in sizeofpage int)
begin
    declare totalSize int default 1;
    declare totalPage int default 1;
    declare index_begin int default 1;

    declare sSql varchar(1000);

    select count(*) into totalSize from t_a;
    set totalPage = CEILING(totalSize/sizeofpage);
    set @limit_begin = currentPage * sizeofpage;
    set @limit_end = sizeofpage;

    select index_begin,totalSize,sizeofpage,totalSize/sizeofpage,totalPage;
    prepare stmt1 from 'select * from t_a limit ?,?';
    execute stmt1 using @limit_begin,@limit_end;
end;
--
drop procedure if exists procedure_t_a_fenye;
select @limit_begin;
select @limit_end;
call procedure_t_a_fenye(2,5);
 

http://jspengxue.iteye.com/blog/46712

 

写的很好

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值