1.存储过程的传入参数IN
需求:传入数据的id返回对应的图片url
DELIMITER $$
-- 入参
CREATE PROCEDURE test(IN book_id BIGINT(11))
BEGIN
DECLARE url VARCHAR(255) DEFAULT '';
SELECT IMG_URL INTO url FROM book_mark WHERE id = book_id;
SELECT url;
END
$$
DELIMITER ;
总结
1.传入参数,类型为IN,表示该参数的值必须在调用存储过程时指定,如果不显示指定为IN,那么默认就是IN类型
2.IN类型参数一般只用于传入,在调用存储过程中一般不做修改和返回
3.如果调用存储过程中需要修改和返回值,可以使用OUT类型参数
2.存储过程的输出参数OUT
需求:传入数据的id返回对应的图片url
DELIMITER $$
-- 入参
CREATE PROCEDURE test1(IN book_id BIGINT(11), OUT my_url varchar(255))
BEGIN
SELECT IMG_URL INTO my_url FROM book_mark WHERE id = book_id;
END
$$
DELIMITER ;
-- 声明变量
SET @my_url:='';
-- 调用
CALL test1(2, @my_url);
SELECT @my_url as url;
总结
1.传出参数:在调用存储过程,可以改变其值,并可返回
2.OUT是传出参数,不能用于传入参数值
3.调用存储过程时,OUT参数也需要指定,但必须是变量,不能是常量
4.如果既需要传入,又需要传出,可以使用INOUT类型参数
3.存储过程的可变参数INOUT
需求:传入的id,url,可以为传出参数
DELIMITER $$
-- 入参
CREATE PROCEDURE test2(INOUT book_id BIGINT(11), INOUT my_url varchar(255))
BEGIN
SET book_id = 5;
SET my_url = 'hahaha';
SELECT ID, IMG_URL INTO book_id,my_url FROM book_mark WHERE id = book_id;
END
$$
DELIMITER ;
-- 声明变量
SET @book_id:=0;
SET @my_url:='';
-- 调用
CALL test2(@book_id, @my_url);
SELECT @my_url as url, @book_id as id;
总结
1.可变变量INOUT类型:调用时可传入值,在调用过程中,可修改其值,同时也可返回值
2.INOUT参数集合了IN和OUT参数的特性
3.INOUT调用时传入的是变量而非常量