반응형
17.2.7.3. SELECT ... INTO 명령문
SELECT col_name[,...] INTO var_name[,...] table_expr
이와 같은 SELECT 신텍스는 선택한 컬럼을 변수에 직접 저장한다. 따라서, 오로지 단일 열(single row)만이 복구될 수도 있다.
SELECT id,data INTO x,y FROM test.t1 LIMIT 1;
사용자 변수 이름은 대소문자 구분을 하지 않는다. Section 9.3, “사용자 지정 변수” 참조.
Important : SQL 변수 이름은 컬럼 이름과 서로 달라야 한다. 만일, SELECT ... INTO 명령문과 같은 SQL 명령문이, 선언된 로컬 변수와 컬럼의 이름이 동일한 참조를 하게 되면, MySQL은 참조를 변수의 이름으로 해석하게 된다. 예를 들어, 아래의 명령문에서 보면, xname 은 xname column 이 아니라 xname 변수로 해석하게 된다 :
CREATE PROCEDURE sp1 (x VARCHAR(5))
BEGIN
DECLARE xname VARCHAR(5) DEFAULT 'bob';
DECLARE newname VARCHAR(5);
DECLARE xid INT;
SELECT xname,id INTO newname,xid
FROM table1 WHERE xname = xname;
SELECT newname;
END;
이 프로시저가 호출되면, newname 변수는 table1.xname 컬럼에 상관없이 ‘bob’이라는 값을 리턴한다.
Section I.1, “스토어드 루틴과 트리거상에서의 제약 사항”을 같이 참조하기 바람
SELECT col_name[,...] INTO var_name[,...] table_expr
이와 같은 SELECT 신텍스는 선택한 컬럼을 변수에 직접 저장한다. 따라서, 오로지 단일 열(single row)만이 복구될 수도 있다.
SELECT id,data INTO x,y FROM test.t1 LIMIT 1;
사용자 변수 이름은 대소문자 구분을 하지 않는다. Section 9.3, “사용자 지정 변수” 참조.
Important : SQL 변수 이름은 컬럼 이름과 서로 달라야 한다. 만일, SELECT ... INTO 명령문과 같은 SQL 명령문이, 선언된 로컬 변수와 컬럼의 이름이 동일한 참조를 하게 되면, MySQL은 참조를 변수의 이름으로 해석하게 된다. 예를 들어, 아래의 명령문에서 보면, xname 은 xname column 이 아니라 xname 변수로 해석하게 된다 :
CREATE PROCEDURE sp1 (x VARCHAR(5))
BEGIN
DECLARE xname VARCHAR(5) DEFAULT 'bob';
DECLARE newname VARCHAR(5);
DECLARE xid INT;
SELECT xname,id INTO newname,xid
FROM table1 WHERE xname = xname;
SELECT newname;
END;
이 프로시저가 호출되면, newname 변수는 table1.xname 컬럼에 상관없이 ‘bob’이라는 값을 리턴한다.
Section I.1, “스토어드 루틴과 트리거상에서의 제약 사항”을 같이 참조하기 바람
반응형