Computer >> 컴퓨터 >  >> 프로그램 작성 >> MySQL

MySQL은 저장 프로시저가 생성된 시점의 환경을 보존합니까?

<시간/>

실제로 MySQL은 저장 프로시저가 생성되는 시점의 환경을 보존합니다. 문자열을 연결하기 위해 두 개의 막대를 사용하는 예제를 따르면 이해할 수 있습니다. 이것은 SQL 모드가 si인 동안에만 유효합니다. 그러나 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)