执行存储在列中的表达式

时间:2018-06-22 10:31:44

标签: mysql

我需要一些有关执行存储在表的列中的表达式(按位)的帮助。
输入:

ID  | expression   
----|-------------
  1 | 1&0         
  2 | (1&1)|(0&1)

所需的输出:

ID  | expression  | value  
----|-------------|-------  
  1 | 1&0         |  0 
  2 | (1&1)|(0&1) |  1  

我正在尝试以下类似操作,但未执行该表达式。

PREPARE stmt from 'select ?  into @outvar';  
set @invar = '1&0';  
execute stmt using @invar;  
select @outvar;  

上面的输出为1&0,但所需的输出为0。

实际上,我想将输出存储在上面的伪代码中所定义的变量中。

2 个答案:

答案 0 :(得分:0)

使用准备好的语句,第二轮发送到服务器的内容将按字面处理。它们不能成为SQL的一部分。您不应该为此使用占位符:

SET @invar = '(1&1)&(0&1)'; 
SET @s = CONCAT('SELECT ', @invar, ' INTO @outvar');

PREPARE stmt FROM @s;
EXECUTE stmt;  
SELECT @outvar;  

答案 1 :(得分:0)

我为您建立了执行此操作的程序

DROP TABLE IF EXISTS  test10;
DROP PROCEDURE IF EXISTS `sp_test10`;


create table test10 (ID int,  expression VARCHAR(20));


insert into test10 values ( 1 , '1&0');
insert into test10 values ( 2 , '(1&1)|(0&1)');


 CREATE PROCEDURE sp_test10 (IN IN_ID int, OUT OUT_VAL INT) 
 BEGIN 


     SELECT expression INTO @exp FROM test10 WHERE ID=IN_ID;

     SET @q = CONCAT('SELECT ',@exp,' INTO @exp '); 

     PREPARE stmt1 FROM @q; 
     EXECUTE stmt1; 

     DEALLOCATE PREPARE stmt1; 

     SET OUT_VAL = @exp;

 END\\ 
; 


call sp_test10(2,@result);
select @result; 

结果:

  • call sp_test10(1,@result)返回 0
  • call sp_test10(2,@result)返回 1

http://rextester.com/live/SMLB31207