2017-04-07 27 views
1

예상되지 않는다구문 오류는 라인 1에서 : '('나는 유닉스에 새로 온 사람으로서 나는이 오류가 왜 누군가가 도움을 줄 수

Error: 0403-057 Syntax error at line 1 : `(' is not expected 

유닉스 서버 사용 : AIX의 servname 1 6 00F635064C00

사용

스크립트 (어제 소스 파일 전날 도착하지 않은 경우 이메일 알림을 보내려면) :

#!/usr/bin/ksh 

count=$(sqlplus $PROD_DB @select count(*) from file_audit where (file_name like '%abc%' or file_name like '%dce%') and substr(file_name,17,8)=to_char(to_date(sysdate-2,'DD/MM/YY'), 'yyyymmdd') > asa_file_count.log) 

daybefore=`TZ=aaa48 date +%d-%m-%Y` 

if [[ $count -lt 20 ]] 
then 
echo "Alert - Source files are yet to be received for date: $daybefore" | mail -s "Alert : Source data files missing" [email protected] 
fi 
+0

친절하게 귀하의 게시물을 편집하고 포맷 제대로 ... –

+0

사이트에 오신 것을 환영합니다! 질문에 대한 자세한 내용은 [둘러보기] (https://stackoverflow.com/tour) 및 [ "묻는 방법"] (https://stackoverflow.com/help/how-to-ask/) 페이지를 확인하십시오. 그것은 질 높은 답을 끌어낼 것입니다. – cxw

답변

2

괄호는 쉘에 특별한 귀하의 SQL 스크립트는 괄호는 쉘이 처리하지 않으려는 포함되어 있습니다.. 그러나 선반 모든 인용되지 않은 괄호를 처리합니다. 따라서 쉘에 의해 해석되지 않도록 SQL에서 괄호를 방지하기 위해 따옴표를 사용할 수 있습니다 : 이제

count=$(sqlplus $PROD_DB "@select count(*) from file_audit where (file_name like '%abc%' or file_name like '%dce%') and substr(file_name,17,8)=to_char(to_date(sysdate-2,'DD/MM/YY'), 'yyyymmdd')" > asa_file_count.log) 
#      ^and similarly, a closing quote at the end, just before ">asa_file..." . 

, 두 번째 문제가있다 : 당신은 그러나

count=$(sqlplus ... > asa_file_count.log) 

이,이 방법을 생각한다 count은 카운트가 asa_file_count.log이되고 $()으로 캡처 할 수 없기 때문에 항상 비어 있습니다. 아마 당신이 원하는 것을 할 것입니다 >asa_file_count.log을 제거 믿는다

count=$(sqlplus "$PROD_DB" "<your query>") 

(나는 또한 PROD_DB의 값이 공백이 단지의 경우 $PROD_DB 주위에 따옴표를 넣어.)

+1

sqlplus의 출력을 캡처합니다. 그것을 숫자와 비교하려면, 그 숫자는 숫자이고 다른 것은 출력되지 않아야합니다. 나는 그것을 의심합니다. 일반적으로 적어도 헤더가 포함됩니다. 따라서 나머지 작업을 모두 제거하고 오류가 발생할 경우 추가 작업을 수행해야 할 수도 있습니다 .... – ULick