执行存储在列中的表达式

bkkx9g8r  于 2021-06-20  发布在  Mysql
关注(0)|答案(2)|浏览(239)

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

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。
实际上,我想将输出存储在一个变量中,就像我上面的伪代码中的框架一样。

cgyqldqp

cgyqldqp1#

使用预先准备好的语句,第二轮发送到服务器的内容按字面意思处理。它们不能是sql的一部分。不应为此使用占位符:

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

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

qpgpyjmq2#

我已经给你建立了一个程序

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

相关问题