Search
Duplicate

SQL 구문에서 사용자 변수의 값 저장

문서번호 : 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
최초작성