2016-07-22 13 views
0

Было бы замечательно, если бы это поднято специалистами Intersystems Cache DB:Intersystems Cache команд при записи вручную в файле и выполняется успешно, но не тогда, когда построен с помощью сценария

Я создал скрипт вручную редактировании файл из редактора VI на RHEL linux и запускал его в 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 

УСПЕШНЫЙ ВЫХОД:

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 показывает:

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> 

Каждая команда из get_count когда побежал индивидуально работает просто отлично. Итак, почему синтаксическая ошибка?

ответ

1

У меня есть ответ.

do $system.SQL.Shell() Команда в файле get_count на самом деле должно быть:

do \$system.SQL.Shell() 

Это команда, которая приведет вас к оболочке SQL в Intersystems Cache-DB из которой запускается обычный запрос SQL. Поскольку это было неправильно, все мои следующие команды SQL также терпели неудачу.

Так изменения в моем основном сценарии будут:

Линии:

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

Переход к:

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

Все остальные остальные же.