MySQL 过程语法错误,如何给连接变量赋值?
MySQL procedure syntax error, how to assign a value to the concated variable?
DECLARE LENGTH INT(20) DEFAULT 0;
DECLARE DIM_0 VARCHAR(255);
DECLARE DIM_1 VARCHAR(255);
DECLARE DIM_2 VARCHAR(255);
DECLARE DIM_3 VARCHAR(255);
DECLARE DIM_4 VARCHAR(255);
SET LENGTH = F_DIM_ITEM_NUM(DIM_I);
DECLARE i int(20) DEFAULT 0;
WHILE i < LENGTH
DO
SET concat('DIM_',i) = F_DIM_ITEM_GET(DIM_I, i + 1);
SET i = i + 1;
END WHILE;
函数 F_DIM_ITEM_GET 的 return 似乎没有分配给变量 DIM_i,
或者还有其他错误。我怎样才能让它发挥作用?如有任何建议,我们将不胜感激!
concat('DIM_',i)
不是变量,而是字符串文字(常量),您不能为其赋值。您可以尝试使用 dynamic sql through prepared statements 创建要使用字符串连接动态执行的 sql 语句,然后执行它。
动态创建 sql(显然,首先声明 DSQL 变量),执行它,然后释放它:
DSQL = 'SET ' + concat('DIM_',i) + '= F_DIM_ITEM_GET(DIM_I, i + 1)';
PREPARE stmt FROM DSQL;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
您还需要在使用前声明 i
变量。
DECLARE LENGTH INT(20) DEFAULT 0;
DECLARE DIM_0 VARCHAR(255);
DECLARE DIM_1 VARCHAR(255);
DECLARE DIM_2 VARCHAR(255);
DECLARE DIM_3 VARCHAR(255);
DECLARE DIM_4 VARCHAR(255);
SET LENGTH = F_DIM_ITEM_NUM(DIM_I);
DECLARE i int(20) DEFAULT 0;
WHILE i < LENGTH
DO
SET concat('DIM_',i) = F_DIM_ITEM_GET(DIM_I, i + 1);
SET i = i + 1;
END WHILE;
函数 F_DIM_ITEM_GET 的 return 似乎没有分配给变量 DIM_i, 或者还有其他错误。我怎样才能让它发挥作用?如有任何建议,我们将不胜感激!
concat('DIM_',i)
不是变量,而是字符串文字(常量),您不能为其赋值。您可以尝试使用 dynamic sql through prepared statements 创建要使用字符串连接动态执行的 sql 语句,然后执行它。
动态创建 sql(显然,首先声明 DSQL 变量),执行它,然后释放它:
DSQL = 'SET ' + concat('DIM_',i) + '= F_DIM_ITEM_GET(DIM_I, i + 1)';
PREPARE stmt FROM DSQL;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
您还需要在使用前声明 i
变量。