mysql怎么调用out参数的存储过程

 我来答
liaojielin
2011-05-14 · TA获得超过161个赞
知道答主
回答量:197
采纳率:0%
帮助的人:189万
展开全部
CREATE PROCEDURE [CHARACTER]
@a varchar(20),@b varchar(20),@c varchar(20) output
AS
declare @d int
--begin
select @d=charindex(@a,@b,1)
print @d
if @d=1
begin
set @c='一样'
print @c
end
else
begin
set @c='不同'
print @c
end
GO
在查询分析器中:[CHARACTER] 'Hello','Hello Word!',''
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
lmonkey
2020-12-27 · 教育领域创作者
个人认证用户
lmonkey
采纳数:69 获赞数:176

向TA提问 私信TA
展开全部

MySQL教程4 MySQL8运算符、函数、存储过程及新增数据类型 17.之创建带有IN和OUT参数的存储过程 学习猿地

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
miniappKp4UzYMnDLgVG
2018-11-29 · TA获得超过404个赞
知道答主
回答量:127
采纳率:33%
帮助的人:21.9万
展开全部

---- out

-- 传出参数的存储过程
DELIMITER $
CREATE PROCEDURE pro_out(OUT str VARCHAR(20))
BEGIN
SET str='这是传出参数';
END $

SET @a='';   -- 这句可以省略
CALL pro_out(@a); -- @后边是变量名
SELECT @a;

--- 其他存储过程

/*
  存储过程  创建
  定义完成,其他地方java等中可以调用
*/
USE student
-- 定义存储过程 (Stored Procs 中生成 方法名)
DELIMITER $ # 定义一个任意符号,一般是$
CREATE PROCEDURE pro_demo()
BEGIN
  SELECT * FROM student;
END $   # 结束 引用符号

-- 删除存储过程  只用名字不要括号
DROP PROCEDURE pro_demo;

-- 调用
CALL pro_demo();
-- ---------------------------------

-- 传出参数的存储过程
DELIMITER $
CREATE PROCEDURE pro_out(OUT str VARCHAR(20))
BEGIN
SET str='这是传出参数';
END $

SET @a='';   -- 这句可以省略
CALL pro_out(@a); -- @后边是变量名
SELECT @a;

SHOW VARIABLES;   -- 显示所有的内置变量
SELECT @@basedir; -- 查询单个内置变量

SET @str='list'; -- 定义局部/会话变量
SELECT @str;     -- 读取局部变量
-- -------------------------------
-- 同时有传入和传出参数的存储过程
DELIMITER $
CREATE PROCEDURE pro_in_out(IN id INT,OUT str VARCHAR(20))
BEGIN #  INTO 把查询结果sname,给后边的变量str赋值
SELECT sname INTO str FROM student WHERE sid=id;
END $

SET @aa=''; -- 这句可以省略
CALL pro_in_out(1,@aa);
SELECT @aa;
-- --------------------------------------
-- 带循环的存储过程
DELIMITER $
CREATE PROCEDURE pro_while(INOUT num INT)
BEGIN
DECLARE i INT DEFAULT 1; -- 声明并初始化变量i
DECLARE n INT DEFAULT 0; -- 声明并初始化变量n

WHILE i<=num DO  -- 开始循环
SET n=n+i;
SET i=i+1; -- 不支持i++
END WHILE; -- 循环结束,没有缩进概念通过这里判断

SET num = n;

END $

-- drop procedure pro_while

SET @n=100;
CALL pro_while(@n);
SELECT @n;
-- ------------------------------
CREATE TABLE teacherlog(  # 创建一个记录表teacherlog
 tid INT PRIMARY KEY AUTO_INCREMENT,
 tname VARCHAR(20));
-- 当teacher表中添加一条数据,则执行触发器,在teacherlog表中添加一条日志
CREATE TRIGGER tri_teacherAdd 
AFTER INSERT ON teacher 
FOR EACH ROW
INSERT INTO teacherlog (tname) VALUES('教师表插入了一行数据');
-- tname 是记录表中已经存在的列
DESC teacher;
INSERT INTO teacher (tname) VALUES('教');
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
owvflrl
推荐于2018-06-03 · TA获得超过1653个赞
知道小有建树答主
回答量:647
采纳率:100%
帮助的人:398万
展开全部
call sp_add();
是不是你定义的过程有问题吧,并没有指出返回结果来
像我这样是可以的:

CREATE PROCEDURE sp_add(a int, b int,out c int)
begin

set c=a+ b;

end;
调用过程:
call sp_add (1,2,@a);
select @a;
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
华夏日长兴
2011-05-13 · TA获得超过9592个赞
知道大有可为答主
回答量:6305
采纳率:85%
帮助的人:3724万
展开全部
用call就行了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 3条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式