Mysql中的存储过程详解

来源:互联网 发布:淘宝网dnf游戏币 编辑:程序博客网 时间:2024/06/06 00:50

对于存储过程来说,虽然大多数语法是相同的,但是在Mysql中还是有些地方要注意的。上一篇我为大家统一介绍了一下存储过程的理论以及语法。今天在练习的过程中发现根本不是那么回事,今天我为大家介绍详细介绍一下在Mysql中该如何写存储过程。


1:首先我们介绍在Mysql中创建存储过程(无参)。

DELIMITER //    #写在开始CREATE  PROCEDURE `tests`.`create_test_usesr`()BEGIN    CREATE TABLE studentss(      id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,      student_name VARCHAR(20)    );    SELECT * FROM test_user;END; // DELIMITER ; #写在结尾

注意在Mysql中写存储过程语句在开始和结束的时候一定要写 “DELIMITER // //DELIMITER ;”
DELIMITER 其实就是定义了一个语句执行的结束符,类似函数or存储过程这样的create语句由于其中包含了很多的”;”,而默认MySQL的结束符就是”;”,那么当我们创建的时候就会报错,有了DELIMITER 就可以告诉mysql解释器,该段命令是否已经结束了,mysql是否可以执行了。


2:创建带有传入参数的存储过程:

DELIMITER //    CREATE PROCEDURE proce_test_user_param(IN ids INT,IN userNames VARCHAR(20))    BEGIN        SELECT * FROM test_user WHERE id = ids AND userName = userNames;    END//    DELIMITER;CALL proce_test_user_param ('1','zpzp06')

注意 传入参数的参数名称不能和表字段的名称一样,否则查询数据会有误的。


3:创建既有传入参数又有返回参数的存储过程:

DELIMITER //DROP PROCEDURE IF EXISTS insert_sp3 CREATE PROCEDURE insert_sp3(  IN p INT,  IN userName VARCHAR(20),  IN passwords VARCHAR(20),  IN age VARCHAR(20),  IN address VARCHAR(20),  IN height VARCHAR(20),  OUT p2 INT)  BEGIN     IF p = 1 THEN         SET @v = 1;     ELSE         SET @v = 2;     END IF;     INSERT INTO test_user(userName,passwords,sex,age,address,height)     VALUES(userName,passwords,@v,age,address,height);     SELECT MAX(id) FROM test_user;  END;// DELIMITER#返回参数前面一定要有一个@符号。CALL insert_sp3(1,'zpzp08','1233432','122','北京市顺义区河南路','183CM',@ret)

5:既做输入参数有做输出参数的存储过程:

DELIMITER //DROP PROCEDURE IF EXISTS proc_select_sp4CREATE PROCEDURE proc_select_sp4(INOUT p4 INT)   BEGIN      IF p4 = 1 THEN          SET @v = 300;      ELSE           SET @v = 400;      END IF;      SELECT @v;     END;// DELIMITERSET @pp = 1;CALL proc_select_sp4(@pp)
0 0
原创粉丝点击