【问题标题】:Associative array with mysql stored procedure in shell scriptingshell脚本中mysql存储过程的关联数组
【发布时间】:2015-04-23 06:13:46
【问题描述】:

这是我的输入表:

queue_id |队列名| ---------------------- qid1 | qname1 | ----------------------

我的输出应该是

关键 |价值 | ---------------------- 队列ID | qid1 | 队列名| qname1 | ----------------------

作为 地图[queue_id]=queueId 地图[queue_name]=queueName

这是我的脚本

#!/bin/bash keyPair[queue_name]="queueName" keyPair[queue_id]="queueId" ...... 创建过程 queue_migration() 开始 DECLARE rowcount INT DEFAULT 0; DECLARE colcount INT DEFAULT 0; DECLARE i INT DEFAULT 0; 声明 j INT 默认值 0; 声明 col_name VARCHAR(255); 声明 col_names CURSOR FOR 选择列名 FROM INFORMATION_SCHEMA.COLUMNS WHERE table_name = 'table_name' AND table_schema = 'dbname' ORDER BY ordinal_position; 获取行数到 rowCount 获取列数到 colCount 设置我 = 0; WHILE i= colcount THEN 关闭 col_names; 离开_循环; 万一; FETCH col_names INTO col_name; INSERT INTO logy SELECT CONCAT(\"参见 ${keyPair[\",col_name,\"]} 此处\"); 设置 j = j + 1; 结束循环 the_loop; 设置 i = i + 1; 结束;

我能够正确地看到 col_name(queue_id 和 queue_name)。但是映射失败。当我执行 ${keyPair['queue_name'] 时,我得到了 queueName。但是 ${keyPair[col_name]} 是空的。请提出建议。

【问题讨论】:

    标签: mysql shell stored-procedures associative-array


    【解决方案1】:

    为了在存储例程中“构造”一个​​查询,您需要prepareexecute 它。不会像您希望的那样发生替代。 比如:

    SET @stmt = CONCAT( 'INSERT INTO logy SELECT CONCAT("See ${keyPair["',
                        col_name,
                        '"]} here');
    PREPARE stmt FROM @stmt;
    EXECUTE stmt;
    DEALLOCATE PREPARE stmt;
    

    (如果不完全正确,请道歉。)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-10-15
      • 2015-11-06
      • 2011-03-21
      • 1970-01-01
      • 2015-07-01
      • 2012-04-02
      • 1970-01-01
      相关资源
      最近更新 更多