MySQL是否保留存储过程创建时的环境?


实际上,MySQL会保留存储过程创建时的环境。我们可以借助以下示例来理解,在该示例中,我们使用双柱来连接字符串。只有在SQL模式为ansi的情况下,这才是合法的。但是,如果我们将SQL模式更改为non-ansi,该过程仍然有效,就像原始设置依然有效一样。

示例

mysql> Set sql_mode = 'ansi'//
Query OK, 0 rows affected, 1 warning (0.14 sec)

mysql> Create Procedure Con_string()
    -> SELECT 'a'||'b'//
Query OK, 0 rows affected (0.12 sec)
mysql> Call Con_string ();
+----------+
| 'a'||'b' |
+----------+
| ab       |
+----------+
1 row in set (0.05 sec)

Query OK, 0 rows affected (0.05 sec)

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

mysql> Call Con_string();
+----------+
| 'a'||'b' |
+----------+
| ab       |
+----------+
1 row in set (0.00 sec)
Query OK, 0 rows affected (0.00 sec)

上述结果集显示,即使将SQL模式更改为non-ansi,存储过程Con_string()依然会产生与SQL模式仍为ansi时相同的结果。但是,如果您将SQL模式更改为non-ansi,新过程将不接受双柱。

mysql> create procedure Con_string1()
    -> Select 'a'||'b'//
Query OK, 0 rows affected (0.02 sec)

mysql> Call Con_string1()//
+----------+
| 'a'||'b' |
+----------+
|        0 |
+----------+
1 row in set (0.00 sec)

Query OK, 0 rows affected, 2 warnings (0.00 sec)

更新于:22-6-2020

59次浏览

开始你的职业生涯

通过完成该课程获得认证

开始
广告
© . All rights reserved.