shell脚本中mysql存储过程的关联数组

shell脚本中mysql存储过程的关联数组,mysql,shell,stored-procedures,associative-array,Mysql,Shell,Stored Procedures,Associative Array,这是我的输入表: queue_id | queue_name| ---------------------- qid1 | qname1 | ---------------------- 我的输出应该是 key | value | ---------------------- queueId | qid1 | queueName| qname1 | ---------------------- 何处为 map[queue_id]=queueId

这是我的输入表:

queue_id | queue_name| ---------------------- qid1 | qname1 | ---------------------- 我的输出应该是

key | value | ---------------------- queueId | qid1 | queueName| qname1 | ---------------------- 何处为 map[queue_id]=queueId 映射[队列名称]=队列名称

这是我的剧本

#!/bin/bash keyPair[queue_name]="queueName" keyPair[queue_id]="queueId" ..... CREATE PROCEDURE queue_migration() BEGIN DECLARE rowcount INT DEFAULT 0; DECLARE colcount INT DEFAULT 0; DECLARE i INT DEFAULT 0; DECLARE j INT DEFAULT 0; DECLARE col_name VARCHAR(255); DECLARE col_names CURSOR FOR SELECT column_name FROM INFORMATION_SCHEMA.COLUMNS WHERE table_name = 'table_name' AND table_schema = 'dbname' ORDER BY ordinal_position; Get the row count into rowCount Get the column count into colCount SET i = 0; WHILE i= colcount THEN CLOSE col_names; LEAVE the_loop; END IF; FETCH col_names INTO col_name; INSERT INTO logy SELECT CONCAT(\"See ${keyPair[\",col_name,\"]} here\"); SET j = j + 1; END LOOP the_loop; SET i = i + 1; END WHILE;
我能够正确地看到列名称队列id和队列名称。但映射失败了。当我执行${keyPair['queue_name']时,我得到的是queueName。但是${keyPair[col_name]}是空的。请给出建议。

为了在存储例程中“构造”查询,您需要准备并执行它。不会以您希望的方式进行替换。 比如:

SET @stmt = CONCAT( 'INSERT INTO logy SELECT CONCAT("See ${keyPair["',
                    col_name,
                    '"]} here');
PREPARE stmt FROM @stmt;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
如果这不太正确,请道歉