문서번호 : 32-247808
Document Information
•
최초 작성일 : 2022.04.05
•
최종 수정일 : 2022.04.05
•
이 문서는 아래 버전을 기준으로 작성되었습니다.
◦
MySQl
◦
MariaDB (Xpand 포함)
Description
다음과 같이 사용자 변수를 SQL 구문내에서 참조와 값 저장이 모두 가능하다.
SELECT @rownum := @rownum + 1
from
(SELECT '1' from dual
union all
select '2' from dual) A,
(SELECT @rownum := 0) R
SQL
복사
MySQL 과 MariaDB의 경우 ‘1’과 ‘2’가 return 되지만, MariaDB Xpand의 경우 variable rownum 의 값을 초기화하지 않는 경우 ‘null’ 이 반환된다.
Solution
user variable을 SQL 구문에서 직접 value를 assign할 수 있었다. 그렇지만, 이 기능은 다음과 같이 해당 DBMS에서도 deprecate 될 예정이거나, ‘unsafe’하다 경고하고 있다.
Previous releases of MySQL made it possible to assign a value to a user variable in statements other than SET. This functionality is supported in MySQL 8.0 for backward compatibility but is subject to removal in a future release of MySQL.
It is unsafe to read a user-defined variable and set its value in the same statement (unless the command is SET), because the order of these actions is undefined.
사용자 변수를 SQL 구문에서 값을 저장하는 동작은 SQL 구문의 호환성을 저하하며, 원하지 않는 결과를 불러 올 수 있다.
사용자 변수의 값 할당은 select into 구분을 이용하거나, 필요시 windows function 등을 이용해 목적에 맞게 수정되어야 한다.
Workaround
References
History
일자 | 작성자 | 비고 |
2022.04.05 | jnshin | 최초작성 |