2016-07-22 10 views
0

그것은 좋은 것입니다하지 않을 경우 명령 RHEL 리눅스의 VI 편집기에서 파일을 복사하고 CACHE DB에서이를 실행하면 모든 명령이 성공적으로 실행되었습니다. 배치 스크립트이었다Intersystems에서 캐시 파일에 수동으로 작성하고 실행에 성공하지만, 스크립트를 통해 구축 할 때이 Intersystems에서 캐시 DB 전문가에 의해 흡수되는 경우

#! /bin/ksh 
. /apps/ins/.profile 
cache <<-!END 
do \$system.Security.Login("_SYSTEM","SYS") 
do \$system.SQL.Shell() 
select count(*) from cdat_tb_ceir_blacklist_7 where cdat_c_originator= '278/PLMN/000100' 
select count(*) from cdat_tb_ceir_blacklist_7 where cdat_c_originator= '208/PLMN/002000' 
select count(*) from cdat_tb_ceir_blacklist_7 where cdat_c_originator= '208/PLMN/000100' 
select count(*) from cdat_tb_ceir_blacklist_7 where cdat_c_originator= '206/PLMN/001000' 
exit 
h 
!END 

성공적인 OUTPUT : 나는 그것을 다른 주요 스크립트를 통해 이러한 스크립트 (에코 명령)를 만들고 실행하는 것을 시도하고있는 동안 지금

Node: sur-eir2, Instance: CACHEHA 

INS> 

INS> 
SQL Command Line Shell 
---------------------------------------------------- 
Enter q to quit, ? for help. 
INS>> 
1. select count(*) from cdat_tb_ceir_blacklist_7 where cdat_c_originator= '278/PLMN/000100' 
Aggregate_1 
0 

1 Rows(s) Affected 
--------------------------------------------------------------------------- 
INS>> 
2. select count(*) from cdat_tb_ceir_blacklist_7 where cdat_c_originator= '208/PLMN/002000' 
Aggregate_1 
0 

1 Rows(s) Affected 
--------------------------------------------------------------------------- 
INS>> 
3. select count(*) from cdat_tb_ceir_blacklist_7 where cdat_c_originator= '208/PLMN/000100' 
Aggregate_1 
0 

1 Rows(s) Affected 
--------------------------------------------------------------------------- 
INS>> 
4. select count(*) from cdat_tb_ceir_blacklist_7 where cdat_c_originator= '206/PLMN/001000' 
Aggregate_1 
0 

1 Rows(s) Affected 
--------------------------------------------------------------------------- 
INS>> 

INS> 

, 동일한 명령이 실패 구문 오류를 보여줍니다. 내 주요 스크립트입니다 :

==============From Here========================= 
#! /bin/ksh 
while read line 
do 
echo "select count(*) from cdat_tb_ceir_blacklist_7 where cdat_c_originator = '$line'" 
done <plmn_list>> command_list ; 

echo "#! /bin/ksh" >> get_count 
echo ". /apps/ins/.profile" >> get_count 
echo "cache <<-!END" >> get_count 
echo "do \$system.SQL.Shell()" >> get_count 
cat command_list >> get_count 
echo "exit" >> get_count 
echo "h" >> get_count 
echo "!END" >> get_count 
==================till here the get_count script is generated fine======== 
chmod u+rwx get_count 
ksh ./get_count > query_result <-- query_result shows syntax errors 
sed -n '/Aggregate_1/,+1p' query_result | grep -v "Aggregate_1" > count 
paste plmn_list count > report 
rm -f command_list get_count 

get_count 내용 :

#! /bin/ksh 
. /apps/ins/.profile 
cache <<-!END 
do $system.SQL.Shell() 
select count(*) from cdat_tb_ceir_blacklist_7 where cdat_c_originator = '278/PLMN/000100' 
select count(*) from cdat_tb_ceir_blacklist_7 where cdat_c_originator = '208/PLMN/002000' 
select count(*) from cdat_tb_ceir_blacklist_7 where cdat_c_originator = '208/PLMN/000100' 
exit 
h 
!END 

그래서 모두가 잘 보인다. 그러나 query_result을 보여줍니다 : 실행 get_count에서 각 명령을 개별적으로도 잘 작동

Node: sur-eir2, Instance: CACHEHA 

INS> 

DO .SQL.Shell() 
^ 
<SYNTAX> 
INS> 

SELECT count(*) from cdat_tb_ceir_blacklist_7 where cdat_c_originator = '278/PLM 
^ 
N/000100' 
<SYNTAX> 
INS> 

SELECT count(*) from cdat_tb_ceir_blacklist_7 where cdat_c_originator = '208/PLM 
^ 
N/002000' 
<SYNTAX> 
INS> 

SELECT count(*) from cdat_tb_ceir_blacklist_7 where cdat_c_originator = '208/PLM 
^ 
N/000100' 
<SYNTAX> 
INS> 

EXIT 
^ 
<SYNTAX> 
INS> 

. 왜 구문 오류입니까?

답변

1

나는 대답을 얻었다.

get_count 파일의 명령 do $system.SQL.Shell() 실제로해야한다 :

do \$system.SQL.Shell() 

이것은 정상적인 SQL 쿼리를 실행 곳에서 Intersystems Cache-DB에서 SQL 쉘로 이동 명령입니다. 이것이 잘못 되었기 때문에 다음의 모든 SQL 명령도 실패했습니다.

그래서 내 주요 스크립트의 변화는 다음과 같습니다

라인 :

echo "do \$system.SQL.Shell()" >> get_count 

에 변경 : 같은 나머지 다른

echo "do \\\$system.SQL.Shell()" >> get_count 

다.