Захват результатов db2 sql в сценарии оболочки - PullRequest
1 голос
/ 18 января 2012

У меня есть сценарий оболочки, который подключится к базе данных и получит результаты.Мой сценарий похож на

#!/bin/bash
getResults()
{
    db2 "connect to ${1} user ${2} using ${3}"
    db2 "set schema ${4}"
    status=`db2 -x "select status from results where id=1"`
    echo $status
}
#MAIN STARS HERE
getResults dbname foo bar test

Теперь я хотел получить несколько столбцов из таблиц результатов, используя

select status,timestamp from results where id=1

Как я могу выполнить вышеупомянутый запрос и записать как статус, так и метку времени в две разные оболочкиПеременные, использующие один запрос вместо выполнения 2 разных запросов, таких как

#!/bin/bash
getResults()
{
    db2 "connect to ${1} user ${2} using ${3}"
    db2 "set schema ${4}"
    status=`db2 -x "select status from results where id=1"`
    echo $status
     timestamp=`db2 -x "select timestamp from results where id=1"`
    echo $timestamp

}
#MAIN STARS HERE
getResults dbname foo bar test

Моя таблица результатов выглядит так:

create table (id number, status char(1), timestamp datetime);

А данные похожи на

1 P <some ts>
2 F <some ts>

Спасибо зазаранее!

1 Ответ

2 голосов
/ 18 января 2012

Проблема в том, что соединение с базой данных, которое вы устанавливаете в функции getResults, невидимо для подоболочки (т.е. когда вы вызываете db2 -x).Использование обратных галочек вызывает новую оболочку.

Чтобы эта работа работала, вы должны держать свой запрос в той же оболочке:

db2 "connect to ${1} user ${2} using ${3}"
db2 "set schema ${4}"

db2 -x "select status,timestamp from results where id = 1" | while read status timestamp ; do
    echo $status
    echo $timestamp
done

Обратите внимание, что с помощью цикла while здесь вы получите несколько строкВаш запрос возвращает более 1 строки.SQL легко изменить, чтобы он возвращал только 1 строку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...