您的位置:首页 > 数据库 > MySQL

mysql存储过程实例

2012-03-31 19:48 246 查看
首先创建表 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的记录被删除了
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息