Асоциативен масив със съхранена процедура на mysql в скриптове на shell

Ето моята таблица за въвеждане:

queue_id | queue_name|
----------------------
qid1     |  qname1   |
----------------------

Моят резултат трябва да бъде

key      | value     |
----------------------
queueId  | qid1      |
queueName| qname1    |
----------------------

където като map[queue_id]=queueId map[queue_name]=queueName

Ето сценария, който имам


    #!/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;

Мога да видя col_name правилно (queue_id и queue_name). Но картографирането се проваля. Когато правя ${keyPair['queue_name'], получавам queueName. Но ${keyPair[col_name]} е празен. Моля за предложения.


person Divya P    schedule 21.02.2015    source източник


Отговори (1)


За да „конструирате“ заявка в съхранена рутина, трябва да я prepare и execute. Никаква замяна не се случва по начина, по който се надявате. Нещо като:

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

(Извинете, ако това не е съвсем правилно.)

person Rick James    schedule 21.02.2015