code

MySQL DECLARE의 SELECT INTO 변수로 인해 구문 오류가 발생합니까?

codestyles 2020. 9. 11. 08:01
반응형

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.

참고URL : https://stackoverflow.com/questions/3075147/select-into-variable-in-mysql-declare-causes-syntax-error

반응형