mysql存储过程实例

首先创建表 test


CREATE TABLE IF NOT EXISTS test 
(
	id INT(4) PRIMARY KEY AUTO_INCREMENT,
	name CHAR(20)
);

       以下实例在客户端上运行,如果在DOS上运行,请加“DELIMITER //” 后再创建存储过程如:

定义:

DELIMITER //
CREATE PROCEDURE simple_proc (OUT param1 INT)
BEGIN
	SELECT COUNT(*) INTO param1 FROM test;
END;
//

调用:

DELIMITER ;
CALL simple_proc(@var);
SELECT @var AS number;

结果:


如果存储过程中只有1条语句,可以去掉BEGIN 和END

DELIMITER //
CREATE PROCEDURE simple_proc (OUT param1 INT)
SELECT COUNT(*) INTO param1 FROM test;
//

例(1):     根据变量名插入数据

定义:

CREATE PROCEDURE proc_insert_test(IN name INT)
BEGIN 
	DECLARE my_name CHAR(20);
	IF name = 1 THEN
		SET my_name = 'java';
	ELSE
		SET my_name = 'c';
	END IF;
	INSERT INTO test(name) VALUES(my_name);
END;

调用:

SET @var = 1;
CALL proc_insert_test(@var);
CALL proc_insert_test(2);

结果:


例(2):     两数相减

 

定义:

CREATE PROCEDURE proc_sub(in a INT,in b INT)
BEGIN
	DECLARE C INT DEFAULT 0;
	IF a IS NULL THEN
		SET a = 0;
	END IF;
	IF b IS NULL THEN
		SET b = 0;
	END IF;
	SET c = a - b;
	SELECT c as c;
END;

调用:

CALL proc_sub(5,1);
CALL proc_sub(1,4);

结果:


例(3): 参数为in,可以省略in,这种类型的参数像传值调用,不会改变原参数的值。

 

定义:

CREATE PROCEDURE proc_in(IN var INT)
SET var = 3;

调用:

SET @v = 1;
CALL proc_in(@v);
SELECT @v;

结果:

如果参数为OUT ,结果为:


例(4)      case when 语句

定义:

	CREATE PROCEDURE proc_case(param INT)
BEGIN
	DECLARE i INT;
	SET i = param + 1;
	CASE i
		WHEN 0 THEN	
			INSERT INTO test(name) VALUES('perl');
		WHEN 1 THEN
			UPDATE test SET name = 'javascript' WHERE name = 'perl';
		ELSE
			SELECT * FROM test;
	END CASE;
END;

调用:

CALLproc_case(-1);
CALL proc_case(1);

结果:

调用:

CALL proc_case(-1);
CALL proc_case(0);

结果:

例(5): while 语句

定义:

CREATE PROCEDURE proc_while(param INT)
BEGIN
	DECLARE i INT DEFAULT 0;
	WHILE i<param DO
		INSERT INTO test(name) VALUES('c#');
		SET i = i+1;
	END WHILE;
END;

调用:

CALL proc_while(3);
SELECT * FROM test;

结果:


例(6): repeat 语句

 

定义:

CREATE PROCEDURE proc_repeat(param INT)
BEGIN
	DECLARE i INT DEFAULT 0;
	SELECT count(*) INTO i FROM test;
	REPEAT
		DELETE FROM test WHERE id = i;
		SET i = i-1;
	UNTIL i = 3 END REPEAT;		
END;

调用:

CALL proc_repeat(null);
SELECT * FROM test;

结果:4-6的记录被删除了


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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值