2016-06-10 4 views
1

문을 실행하여 변수에 값을 할당하는 방법 나는 다른 두 가지내가이 라인을 따라 코드를 실행해야

시도 있도록 MySQL은 변수가 한계에 전달 될 수 없습니다 그러나

select @a := id from B limit @i ,1 

난 아무데도 전에 @a를 선언하지 않은

select @proc := concat(' id from B limit ', @i, ',1'); 
prepare stmt from @proc; 
select @a := execute stmt; 

주처럼

select @proc := concat('select @a := id from B limit ', @i, ',1'); 
prepare stmt from @proc; 
execute stmt; 

는이 오류를 제공하지만, 나는 손실입니다 이 순간에 진행 방법을 모릅니다.

+0

어떤 MySQL 버전을 사용하고 있습니까? – wchiquito

+0

mariaDB 10.0.2 – avz2611

답변

1

시도 :

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) 

UPDATE

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) 
+0

ifnull 문의 목적은 무엇입니까? – avz2611

+0

btw'' '를 사용하는 아이디어가 효과가 있었기 때문에 답변을 수락했으나 왜 IFNULL을 사용했는지 설명 할 수 있습니까 – avz2611

+0

@ avz2611 : [IFNULL] (https://mariadb.com/kb/en/mariadb/ifnull/) NULL 일 경우 변수'@ \'i \''에 기본값을 할당하는 것입니다. – wchiquito

관련 문제