programing

execute 문을 사용하여 변수에 값을 할당하는 방법

telebox 2023. 10. 4. 21:14
반응형

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

반응형