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


实际上,MySQL 在创建存储过程时保留了环境。以下面的示例可以理解这一点,其中我们使用两个竖线连接字符串。仅当 SQL 模式为 ansi 时,这才是合法的。但是,如果我们将 SQL 模式更改为非 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 模式更改为非 ansi 之后,过程 Con_string() 仍将生成相同的结果,就好像 SQL 模式仍然为 ansi 一样。但是,新过程将不接受两个竖线,因为我们已将 SQL 模式更改为非 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-Jun-2020

59 次浏览

开启你的 职业生涯

完成课程即可获得认证

开始使用
广告
© . All rights reserved.