2009-10-30 2 views
0

나는 bash는 스크립트에 다음 코드가 :명령 치환은, DB2 보고서 연결되지는

db2 connect to $DB 
var=$(db2 -x "$query" | tr -d " ") 

$queryselect count 쿼리를 보유하고를 -x은 그래서 아무 헤더 명령의 결과를 출력한다 var은 숫자에 할당됩니다.

$(...)은 서브 쉘에서 실행되며 DB2에 대한 연결을 상속하지 않으므로 "SQL1024N A database connection does not exist. SQLSTATE=08003"메시지가 나타납니다.

db2 connect 명령이 환경에 어떤 영향을 주는지 모르겠습니다.

답변

4

한 가지 힌트 : DB2DBDFT 환경 변수를 사용하려는 데이터베이스의 이름으로 설정하십시오. DB2 CLP가 암시 적 연결을 설정합니다 (데이터베이스 서버에서 실행중인 경우).

$ export DB2DBDFT=sample 
$ db2 "select count(*) from empphoto" # <-- no "db2 connect to sample" needed. 

이렇게하면 서브 쉘이 작동하는 데 도움이됩니다.

#!/bin/ksh 

export DB2DBDFT=sample 
count=$(db2 -x "select count(*) from empphoto" | awk '{print $1}') 
print "Count is ${count}" 

행운을 빈다!

0

여기서 구체적인 내용을 모르는 채로 : 첫 번째 명령 'db2 connect to $ DB'가 완료되고 연결됩니다. 그러나 그것이 끝내 자마자 그것은 또한 그것을 닫았다.

var=$(db2 -x "connect to $DB;$query" | tr -d " ") 

IOW : 실행 DB2 명령과 그 첫 번째 '$ DB에 연결'을 실행하자 (쉘이 당신을 위해 $ DB를 교체 한 것) 당신은 오히려이 같은 구조를 원하는처럼

소리가 난다 '$ query'(다시 셸이 대체를 수행했습니다.)

구분자 db2가 원하는지 확실하지 않으므로 ';' 추측이었다. 당신이 서브 쉘에서 모든 변수 처리를 할 수 있다면

+0

죄송 합니다만, db2 명령을 사용하면 세션을 초기화하기 위해 db2 connect가 필요하며, 결국 db2를 보내면 세션을 끝내기 위해 db2 connect reset이 끝납니다. – Abdul

+0

$ (db2 connect ...) 등을 시도했지만 루프 내에서 실행되는 등 느려집니다. – Abdul

2

당신은 같은 것을 할 수 있습니다

db2 connect to $DB 
db2 -x "$query" | tr -d " " | { 
    read var 
    do-stuff with var 
} 

그러나 부모에게 다시 변수 값을 얻기 위해 임시 파일 또는 명명 된 파이프를 사용해야합니다 .