创建过程:
DROP PROCEDURE proc1DELIMITER //
CREATE PROCEDURE proc1(OUT s int)
BEGIN
SELECT COUNT(*) INTO s FROM class
END//
DELIMITER
使用过程:
SET @p_out=1CALL proc1(@p_out)
SELECT @p_out
为这个问题 专门写了一个mysql function,实现的功能是,返回前几条记录。其实还可以在完善的,返回这些记录的数据的。delimiter $$
drop function if exists top7$$
create function top7(num int(11))
returns int(11)
begin
declare totalPrice int
declare i int
declare countNum int
declare tmp int
select count(1) into countNum from mywcd
set i=0
set totalPrice=0
set tmp=0
tt:
while i<countNum
do
set tmp=(select price from mywcdlimit i,1)
set i=i+1
set totalPrice=totalPrice+tmp
if totalPrice>=num then
leave tt
end if
end while
return i
end
$$
delimiter
mysql>select * from mywcd
+—-+——-+
| id | price |
+—-+——-+
| 1 | 100 |
| 2 | 200 |
| 3 | 300 |
| 4 | 400 |
| 5 | 500 |
| 6 | 600 |
+—-+——-+
6 rows in set (0.00 sec)
这是我测试数据的表全部记录。
调用以及返回结果:
mysql>select top7(1001)
+————+
| top7(1001) |
+————+
| 5 |
+————+
1 row in set (0.00 sec)
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)