存储过程输出参数为null??

herocomeback 2007-10-19 03:16:03
CREATE DEFINER = 'root'@'localhost' PROCEDURE `test_proc`(IN aaa VARCHAR(50), IN bbb VARCHAR(200), OUT ccc INTEGER(11))
NOT DETERMINISTIC
CONTAINS SQL
SQL SECURITY DEFINER
COMMENT ''
BEGIN
IF EXISTS (SELECT * FROM test WHERE bbb=bbb) THEN
BEGIN
set ccc = -1;
END;
ELSE
BEGIN
insert into test(aaa,bbb)
values (aaa,bbb);
set ccc = 0;
END;
END IF;
END;


---------------------------
请问,为什么不管是否exists (SELECT * FROM test WHERE bbb=bbb)
输出结果ccc=null??

mysql> call test_proc('111','222',@a);
...全文
127 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
懒得去死 2007-10-20
  • 打赏
  • 举报
回复
(SELECT * FROM test WHERE bbb=bbb)
这句永远为真,不可能为假。

想判断有没有bbb这条记录可以这样:

DELIMITER $$

DROP PROCEDURE IF EXISTS `test`.`test_proc`$$

CREATE DEFINER=`root`@`localhost` PROCEDURE `test_proc`(IN aaa VARCHAR(50), IN bbb VARCHAR(200), OUT ccc INTEGER(11))
NOT DETERMINISTIC
CONTAINS SQL
SQL SECURITY DEFINER
COMMENT ' '
BEGIN
select count(1) from test where bbb=bbb into @cnt;
if @cnt > 1 then
set ccc = -1;
else
insert into test(aaa,bbb)
values (aaa,bbb);
set ccc = 0;
end if;
END$$

DELIMITER ;
herocomeback 2007-10-19
  • 打赏
  • 举报
回复
(SELECT * FROM test WHERE bbb=bbb)
这句为假,@a也为-1,所以就郁闷在这里
懒得去死 2007-10-19
  • 打赏
  • 举报
回复
主要是你想实现什么功能呢
懒得去死 2007-10-19
  • 打赏
  • 举报
回复
只要这句为真:(SELECT * FROM test WHERE bbb=bbb)
就永远是-1
herocomeback 2007-10-19
  • 打赏
  • 举报
回复
但是select @a;
结果都是@a=-1,其实应该执行下面的语句
唉,不知道怎么回事
懒得去死 2007-10-19
  • 打赏
  • 举报
回复
call test_proc( '111 ', '222 ',@a);select @a;

56,677

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧