MySQL DECLARE의 SELECT INTO 변수로 인해 구문 오류가 발생합니까?
단일 값을 변수로 선택하고 싶습니다. 나는 다음을 시도했다 :
DECLARE myvar INT(4);
-즉시 구문 오류를 반환합니다.
SELECT myvalue
FROM mytable
WHERE anothervalue = 1;
-단일 정수를 반환합니다.
SELECT myvalue
INTO myvar
FROM mytable
WHERE anothervalue = 1;
-작동하지 않음, @myvar 시도
저장 프로 시저 또는 함수 외부에서 DECLARE를 사용할 수 있습니까?
어쩌면 나는 사용자 변수의 개념을 얻지 못할 수도 있습니다 ... 방금 시도했습니다.
SELECT myvalue INTO @var FROM `mytable` WHERE uid = 1;
SELECT @var;
... 예상대로 작동했습니다. 그러나 한 번에 각 쿼리를 실행하면 @var NULL이 표시됩니다.
나는이 같은 문제에 직면했지만 혼란을 일으키는 원인을 알고 있다고 생각합니다. MySql 쿼리 분석기를 사용하는 경우이 작업을 잘 수행 할 수 있습니다.
SELECT myvalue
INTO @myvar
FROM mytable
WHERE anothervalue = 1;
그러나 동일한 쿼리를 MySql Workbench에 넣으면 구문 오류가 발생합니다. 왜 다른지 모르겠지만 그렇습니다. MySql Workbench의 문제를 해결하려면 다음과 같이 쿼리를 다시 작성할 수 있습니다.
SELECT @myvar:=myvalue
FROM mytable
WHERE anothervalue = 1;
결국 저장 프로 시저가 내 문제의 해결책이었습니다. 도움이 된 것은 다음과 같습니다.
DELIMITER //
CREATE PROCEDURE test ()
BEGIN
DECLARE myvar DOUBLE;
SELECT somevalue INTO myvar FROM mytable WHERE uid=1;
SELECT myvar;
END
//
DELIMITER ;
call test ();
이 답변은 여러 변수를 잘 다루지 않습니다.
저장 프로 시저에서 인라인 할당을 수행하면 해당 결과도 결과 집합으로 다시 전송됩니다. 혼란 스러울 수 있습니다. 여러 변수와 함께 SELECT ... INTO 구문을 사용하려면 다음을 수행하십시오.
SELECT a, b INTO @a, @b FROM mytable LIMIT 1;
SELECT는 항상 필요한 것은 아니지만 1 행만 반환해야하므로 LIMIT 1을 반환해야합니다.
DECLARE 대신 SET을 사용할 수도 있습니다.
SET @myvar := (SELECT somevalue INTO myvar FROM mytable WHERE uid=1);
SELECT myvar;
당 MySQL의 문서는 단지 시작에 작품을 선언 a는 BEGIN ... END 블록을 저장 프로그램으로.
You don't need to DECLARE a variable in MySQL. A variable's type is determined automatically when it is first assigned a value. Its type can be one of: integer, decimal, floating-point, binary or nonbinary string, or NULL value. See the User-Defined Variables documentation for more information:
http://dev.mysql.com/doc/refman/5.0/en/user-variables.html
You can use SELECT ... INTO to assign columns to a variable:
http://dev.mysql.com/doc/refman/5.0/en/select-into-statement.html
Example:
mysql> SELECT 1 INTO @var;
Query OK, 1 row affected (0.00 sec)
mysql> SELECT @var;
+------+
| @var |
+------+
| 1 |
+------+
1 row in set (0.00 sec)
It is worth noting that despite the fact that you can SELECT INTO
global variables like:
SELECT ... INTO @XYZ ...
You can NOT use FETCH INTO
global variables like:
FETCH ... INTO @XYZ
Looks like it's not a bug. I hope it will be helpful to someone...
I am using version 6 (MySQL Workbench Community (GPL) for Windows version 6.0.9 revision 11421 build 1170) on Windows Vista. I have no problem with the following options. Probably they fixed it since these guys got the problems three years ago.
/* first option */
SELECT ID
INTO @myvar
FROM party
WHERE Type = 'individual';
-- get the result
select @myvar;
/* second option */
SELECT @myvar:=ID
FROM party
WHERE Type = 'individual';
/* third option. The same as SQL Server does */
SELECT @myvar = ID FROM party WHERE Type = 'individual';
All option above give me a correct result.
You maybe miss the @ symbol before your value,like that select 'test' INTO @myValue
;
For those running in such issues right now, just try to put an alias for the table, this should the trick, e.g:
SELECT myvalue
INTO myvar
FROM mytable x
WHERE x.anothervalue = 1;
It worked for me.
Cheers.
'code' 카테고리의 다른 글
void 포인터를 삭제하는 것이 안전합니까? (0) | 2020.09.11 |
---|---|
Tic Tac Toe 게임 오버 결정을위한 알고리즘 (0) | 2020.09.11 |
pkg-config 검색 경로에서 패키지 cairo를 찾을 수 없습니다. (0) | 2020.09.11 |
정의되지 않은 동작을 가진 분기는 도달 할 수없는 것으로 간주되고 데드 코드로 최적화 될 수 있습니까? (0) | 2020.09.10 |
CSS를 사용하여 요소의 오프셋을 제거하려면 어떻게해야합니까? (0) | 2020.09.10 |