2012-01-17 2 views
1

데이터베이스에 연결하여 결과를 얻는 쉘 스크립트가 있습니다. 쉘 스크립트에서 db2 sql 결과를 캡처하십시오.

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

를 사용하여 결과 테이블에서 여러 열을 얻을 단일 쿼리를 사용하여 두 개의 서로 다른 쉘 변수에 상태 및 타임 스탬프를 모두 캡처하고 싶었처럼 내 스크립트입니다 대신

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

내 결과를 테이블처럼 2 개에 differnt 쿼리를 실행하는 것은 같은 것입니다 :

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

그리고 데이터는 사전에

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

같은

감사합니다!

+0

테이블은 어디에 있습니까? 데이터베이스에있는 경우 일반 삽입/작성 문으로 실행할 수 있어야합니다 ... 셸 스크립트에 도움이되지 못합니다. 죄송합니다. –

+0

내 테이블이 데이터베이스에 있고 위 쉘 스크립트의 쿼리를 사용하여 해당 테이블의 데이터를 검색하려고했습니다. 나는 db2를 cnsole에서 sql을 실행하는 방법을 알고있다. – springpress

답변

2

문제는 getResults 함수에서 만든 데이터베이스 연결이 하위 셸에서 보이지 않는 것입니다 (예 : db2 -x). backticks를 사용하면 새 셸이 호출됩니다.

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 개 이상의 행을 반환하는 경우 :

는 같은 쉘에서 쿼리를 유지하기 위해 필요한이 작업을 확인하십시오. 단 1 행만 반환하도록 SQL을 수정하는 것은 쉽습니다.

+0

내 문제가 해결 될 것 같습니다. 내일 이걸 시험하고 너에게 돌아가 보자. 귀하의 답변에 감사드립니다. – springpress

+0

감사합니다! – springpress

관련 문제