一个简单的存储过程问题,请帮忙看下

xihuluyou 2006-04-27 11:06:41
CREATE PROCEDURE `p4`()
BEGIN
set sql_mode='ansi';
set @a='haha' || 'wawa';
END

这样一个过程,究竟错在哪?

执行 call p4()
select @a;
返回的居然是0,而不是 我想要的字符串 hahawawa

...全文
173 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
littleboys 2006-04-29
  • 打赏
  • 举报
回复
学习了
xihuluyou 2006-04-28
  • 打赏
  • 举报
回复
up 谁知道区别吗
loveflea 2006-04-28
  • 打赏
  • 举报
回复
你在存储过程的外边设置sql_mode,mysql会自动记录sql_mode状态的,不管你以后运行的sql_mode是什么,存储过程都能得到正确的结果!

mysql> set sql_mode='ansi';
Query OK, 0 rows affected (0.00 sec)

mysql> delimiter //
mysql> CREATE PROCEDURE `p4`()
-> BEGIN
-> set @a='haha' || 'wawa';
-> END
-> //
Query OK, 0 rows affected (0.06 sec)

mysql> delimiter ;

mysql> call p4();
Query OK, 0 rows affected (0.00 sec)

mysql> select @a;
+----------+
| @a |
+----------+
| hahawawa |
+----------+
1 row in set (0.00 sec)

mysql> set sql_mode='';
Query OK, 0 rows affected (0.00 sec)

mysql> set @a='';
Query OK, 0 rows affected (0.00 sec)

mysql> call p4();
Query OK, 0 rows affected (0.00 sec)

mysql> select @a;
+----------+
| @a |
+----------+
| hahawawa |
+----------+
1 row in set (0.00 sec)

mysql> show create procedure p4;
+-----------+-------------------------------------------------------------+-----
--------------------------------------------------------------------------------
--+
| Procedure | sql_mode | Crea
te Procedure
|
+-----------+-------------------------------------------------------------+-----
--------------------------------------------------------------------------------
--+
| p4 | REAL_AS_FLOAT,PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE,ANSI | CREA
TE DEFINER="root"@"localhost" PROCEDURE "p4"()
BEGIN
set @a='haha' || 'wawa';
END |
+-----------+-------------------------------------------------------------+-----
--------------------------------------------------------------------------------
--+
1 row in set (0.00 sec)
xihuluyou 2006-04-27
  • 打赏
  • 举报
回复
太谢谢了:)

可是我在命令行里测试,
mysql>set @a='haha';
mysql>set @b='wawa';
mysql>set sql_mode='ansi';
mysql>set @c=@a || @b;

返回的就是正确的
hahawawa

这两者是不同的吗?
hy2003fly 2006-04-27
  • 打赏
  • 举报
回复
你的函数用错了,应该是concat(string1,string2,...)
mysql> create procedure `p4`()
-> begin
-> set sql_mode='ansi';
-> set @a=concat('haha','wawa');
-> end
-> //
Query OK, 0 rows affected (0.34 sec)

mysql> call p4()//
Query OK, 0 rows affected (0.04 sec)

mysql> select @a//
+----------+
| @a |
+----------+
| hahawawa |
+----------+
1 row in set (0.00 sec)

56,678

社区成员

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

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