2016-07-22 4 views
0

を通じて構築されたとき、これはインターシステムズのキャッシュDBの専門家に取り込まれている場合それは素晴らしいことだファイルに手動で書かれており、実行時にコマンド:インターシステムズキャッシュが正常に行われなくスクリプト

私は手動で編集してスクリプトを作成しましたRHEL linux上のVIエディタからファイルを取り出し、それをCACHE 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 

SUCCESSFUL 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 

同じ残りの他のすべて。

関連する問題