2013-07-17 2 views
5

쉘 I가 다음 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 변수에 저장할 수 다음과 같이

내 쉘 스크립트입니다.

누구나 왜 작동하지 않는지 알 수 있습니까?

+0

[여기]는 KSH 예제있다 (http://asktom.oracle.com/pls/asktom/f/f?p=100:11:0::::P11_QUESTION_ID:430819636473). 그것은 bash (아주 작은 nix 경험)에서 실행되는지 확실하지 않지만 또한 페이지에 bash 토론이 있습니다. 기본적으로이 예제에서는 sed와 grep을 사용하여 모든 SQLPlus 출력에서 ​​쿼리 결과를 추출합니다. –

답변

11

떠들썩한 기능의 사용과 떠들썩한 예 (! 데이터베이스 OS 인증을주의 "/") 실제로 내가 그 2 queires을 분리하고 내 껍질에에는 별도로 그들에게 전화입니다 무슨 짓을

#!/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 
+0

@Bjarte Brandt에게 많은 도움을 주신 것에 감사드립니다. – Angelina

+0

매우 깨끗하고 유용한 답변. –

1

스크립트 :

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 [email protected] 
fi 
+0

오라클에서 원하는 열이 두 개 이상 있다면 어떻게해야합니까? 예 : 5 열 10 행의 표 형식 데이터 – sjd