Es wäre toll, wenn diese nach oben von Intersystems Caché DB-Experten getroffen wird:Intersystems Caché-Befehle, wenn sie manuell in eine Datei geschrieben und ausgeführt ist erfolgreich, aber nicht, wenn sie durch ein Skript gebaut
ich ein Skript erstellt, indem Sie manuell eine Bearbeitung Datei von VI-Editor auf RHEL Linux und lief das auf CACHE DB, und alle Befehle wurden erfolgreich ausgeführt. Die Batch-Skript war:
#! /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
ERFOLGREICH 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>
Jetzt, während ich versuche, über eine anderen Haupt-Skript (echo-Befehle), wie ein Skript zu erstellen und ausführen, die gleichen Befehle fehlschlagen und zeige syntaktischen Fehler. Mein Haupt-Skript ist:
==============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
Der get_count
Inhalt:
#! /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
So sieht alles dort in Ordnung. Doch die query_result
zeigt:
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>
Jeder Befehl von get_count
, wenn sie einzeln auch ganz gut funktioniert lief. Warum also der syntaktische Fehler?