7

次のSQLスクリプトを呼び出すシェルスクリプトがあります。

     INSERT INTO SEMANTIC.COUNT_STATISTICS (...);
     UPDATE SEMANTIC.COUNT_STATISTICS 
     SET PRNCT_CHANGE = 1.1;


  --want to store result of this bellow select statement in model_count variable

      select PRNCT_CHANGE
      FROM SEMANTIC.COUNT_STATISTICS
      WHERE model = '&MY_MODEL'
      AND NEW_DATE = (
                      select max(NEW_DATE)
                      from SEMANTIC.COUNT_STATISTICS
                      where MODEL = '&MY_MODEL'
                     );

では、この PERCENTAGE_NUMBER 変数をシェル スクリプトに戻すにはどうすればよいでしょうか。

私のシェルスクリプトは次のとおりです。

#!/bin/bash
#
# setup oracle, java, and d2rq environment
. /etc/profile.d/oracle.sh
. /etc/profile.d/java.sh
. /etc/profile.d/d2rq.sh

cd /opt/D2RQ

model_count=$(sqlplus user/pass @count.sql 'MODEL')

if ["$model_count" > 0]; then
   echo "percentage count is positive"
else
   echo "its negative"

その最後の SELECT ステートメントの結果を、シェル スクリプトの model_count 変数に格納したいと考えています。

なぜ機能しないのか誰でも知っていますか?

4

2 に答える 2

14

bash 関数を使用した bash の例 (注意! データベース OS 認証 "/")

#!/bin/bash

get_count () {
    sqlplus -s / <<!
    set heading off
    set feedback off
    set pages 0
    select count(*) from all_objects where object_type = '$1'; 
!
}

count=$(get_count $1)

echo $count

if [ "$count" -gt 0 ]; then
    echo "is greater than zero"
else
    echo "is less or equal to zero"
fi


~/tmp/ $ ./count.sh INDEX
2922
is greater than zero
~/tmp/ $ ./count.sh TABLE
1911
is greater than zero
~/tmp/ $ ./count.sh FUNCTION
226
is greater than zero
~/tmp/ $ ./count.sh "SUPEROBJECT"
0
is less or equal to zero
于 2013-07-18T19:10:53.750 に答える
2

私が実際にしたことは、これら 2 つのクエリを分離し、シェル スクリプトで別々に呼び出したことです。

sqlplus -S user/pass << EOF
whenever sqlerror exit 1;
set echo on
@/opt/D2RQ/model_count.sql '$MODEL'  <--model_count.sql still has those INSERT & UPDATE statements
exit;
EOF

model_count=`sqlplus -S user/pass << EOF
SELECT PRNCT_CHANGE
 FROM COUNT_STATISTICS
WHERE model = '$MODEL'
AND NEW_DATE = (
                select max(NEW_DATE)
                from COUNT_STATISTICS
                where MODEL = '$MODEL'
               );
exit;
EOF`


if [ $model_count >= 0 ]; then
    echo "$model_count"
else
         echo "'$MODEL' is negative " | mail -s "scripts issues" -c angelina1984@aol.com
fi
于 2013-07-18T20:02:25.323 に答える