반응형
execute 문을 사용하여 변수에 값을 할당하는 방법
이 선을 따라 코드를 실행해야 합니다.
select @a := id from B limit @i ,1
그러나 mysql은 변수를 제한적으로 전달할 수 없기 때문에 다른 두 가지를 시도했습니다.
select @proc := concat('select @a := id from B limit ', @i, ',1');
prepare stmt from @proc;
execute stmt;
이로 인해 오류가 발생합니다.
select @proc := concat(' id from B limit ', @i, ',1');
prepare stmt from @proc;
select @a := execute stmt;
이전에 @a를 선언한 적은 없지만 이 순간 길을 잃어서 어떻게 진행해야 할지 모르겠습니다.
시도:
MariaDB [_]> SET @`a` := NULL,
-> @`proc` := CONCAT('SELECT @`a` := `B`.`id`
'> FROM `B`
'> LIMIT ', IFNULL(@`i`, 0), ', 1
'> ');
Query OK, 0 rows affected (0.00 sec)
MariaDB [_]> PREPARE `stmt` FROM @`proc`;
Query OK, 0 rows affected (0.00 sec)
Statement prepared
MariaDB [_]> EXECUTE `stmt`;
+------------------+
| @`a` := `B`.`id` |
+------------------+
| 10 |
+------------------+
1 row in set (0.00 sec)
MariaDB [_]> DEALLOCATE PREPARE `stmt`;
Query OK, 0 rows affected (0.00 sec)
MariaDB [_]> SELECT @`a`;
+------+
| @`a` |
+------+
| 10 |
+------+
1 row in set (0.00 sec)
갱신하다
CONCAT 기능을 사용하지 않는 또 다른 옵션.
MariaDB [_]> SET @`a` := NULL,
-> @`i` := IFNULL(@`i`, 0);
Query OK, 0 rows affected (0.00 sec)
MariaDB [_]> PREPARE `stmt` FROM 'SELECT @`a` := `B`.`id`
'> FROM `B`
'> LIMIT ?, 1
'> ';
Query OK, 0 rows affected (0.00 sec)
Statement prepared
MariaDB [_]> EXECUTE `stmt` USING @`i`;
+------------------+
| @`a` := `B`.`id` |
+------------------+
| 10 |
+------------------+
1 row in set (0.00 sec)
MariaDB [_]> DEALLOCATE PREPARE `stmt`;
Query OK, 0 rows affected (0.00 sec)
MariaDB [_]> SELECT @`a`;
+------+
| @`a` |
+------+
| 10 |
+------+
1 row in set (0.00 sec)
언급URL : https://stackoverflow.com/questions/37742438/how-to-assign-value-to-a-variable-using-an-execute-statement
반응형
'programing' 카테고리의 다른 글
최소 8자, 숫자 1개, 대문자 1개, 소문자 1개를 포함하는 비밀번호용 javascript regex (0) | 2023.10.04 |
---|---|
여러 표에 걸친 합성 지수와 동등합니까? (0) | 2023.10.04 |
boole 값을 초기 값과 반대로 변경 (0) | 2023.10.04 |
MySQL 저장 프로시저를 저장소에 포함하시겠습니까? (0) | 2023.10.04 |
C++ 컴파일러로 사용할 MinGW 파일 (0) | 2023.10.04 |