실제로 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)