MySQL 存储过程简单实例

1、创建实例数据库
CREATE DATABASE procdb DEFAULT CHARSET utf8;

USE procdb;

2、创建要使用的表
CREATE TABLE tb
(
    id INT PRIMARY KEY NOT NULL,
    cname VARCHAR(20)
);

INSERT INTO tb VALUES
(1,'统一方便面'),
(2,'康师傅方便面'),
(3,'马老表方便面'),
(4,'王老吉方便面');

SELECT * FROM tb;

3、创建一个最简单的存储过程
DELIMITER $$

CREATE PROCEDURE p1()
    BEGIN
        SELECT id,cname FROM tb;
    END$$

DELIMITER ;

#调用存储过程p1
CALL p1();

################
DELIMITER $$
CREATE PROCEDURE p2()
BEGIN
    #declare @dt int;  ##使用临时变量不用声明数据类型
    SET @dt =CURDATE();
    SELECT CONCAT(YEAR(@dt),'年',MONTH(@dt),'月',DAY(@dt),'日') ;
END$$
DELIMITER ;


#调用存储过程P2
CALL p2();

4、创建一个带传入参数的存储过程
DROP PROCEDURE IF EXISTS p3;

DELIMITER $$
CREATE PROCEDURE p3(IN aid INT)
COMMENT '向表中插入一条记录'
BEGIN
    ##定义一个整形变量
    DECLARE v1 INT;

    ##将输入参数的值赋给变量
    SET v1 = aid;

    ##执行插入操作
    INSERT INTO tb(id,cname) VALUES(v1,CONCAT('第',v1,'条记录'));
END$$
DELIMITER ;

##调用存储过程,使用一个参数,就会在表中插入一条记录
CALL p3(99);

SELECT * FROM tb;

5、带输出参数的存储过程
DROP PROCEDURE IF EXISTS p4;

DELIMITER $$
CREATE PROCEDURE p4(OUT ret INT)
COMMENT '输出表中id的最大值'
BEGIN
   DECLARE maxid INT;
   SELECT MAX(id) INTO maxid FROM tb;
   SET ret=maxid;
END$$
DELIMITER ;

#调用存储过程
CALL p4(@maxno);
SELECT @maxno;  #查看临时变量@maxno

6、带输入输出参数的存储过程
DROP PROCEDURE p5;

DELIMITER $$
CREATE PROCEDURE p5(IN p1 INT , OUT p2 INT)
COMMENT '带输入输出参数的存储过程'
BEGIN
    IF p1 = 1 THEN
        #用@符号加变量名的方式定义一个变量,与declare类似
        SET @v = 10;
    ELSE
        SET @v = 20;
    END IF;

    #语句体内可以执行多条sql,但必须以分号分隔

    INSERT INTO tb(id,cname) VALUES(@v,CONCAT('第',@v,'条记录'));
    SELECT MAX(id) INTO p2 FROM tb;
END$$
DELIMITER ;

#调用存储过程
CALL p5(2,@maxid);
SELECT * FROM tb;
SELECT @maxid;


7、既做输入又做输出参数的存储过程
DROP PROCEDURE IF EXISTS p6;

DELIMITER $$
CREATE PROCEDURE p6(INOUT argument INT)
COMMENT '既做输入又做输出参数的存储过程'
BEGIN
IF argument = 4 THEN
    SET @pg = 400;
ELSE
    SET @pg = 500;
END IF; 

SELECT @pg;

SET argument=@pg;

END$$

DELIMITER ;

# 调用存储过程,这里需要先设置一个已赋值的变量,然后再作为参数传入,同时也作为输出参数
SET @pp = 5;
CALL p6(@pp);
SELECT @pp;

转载于:https://my.oschina.net/alkz/blog/3048332

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值