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.