2017-02-16 6 views
0

나는 이것이 일반적으로 논의되는 주제라는 것을 알고있다. 그러나 나는 다른 상황에서 모든 답변을 쓸모 없게 시도했다. 그래서 나는 마침내 내 상황을 게시하기로 결정했다. 내 스크립트에서sqlplus에서 작은 따옴표를 사용하는 방법 유닉스 쉘 스크립트에서 문자열 선택

:

failures=$(sqlplus -s << EOF 
${SQLIN} 
set heading off; 
WHENEVER OSERROR EXIT 9; 
WHENEVER SQLERROR EXIT SQL.SQLCODE; 
select failures from dba_jobs where what like dbms_refresh.refresh%; 
EOF 
) 

dbms_refresh.refresh% 내가 자체가 충분하지 않습니다에 의해하지만, 난 그냥 작은 따옴표를 사용하여 알고, 작은 따옴표로 캡처 할 것입니다. 나는 select 명령에서 unix와 oracle이 작은 따옴표를 어떻게 번역하는지 완전히 이해하지 못한다.

누군가가 나에게 어떻게 유닉스와 오라클은 서로에게 이야기에 대한 설명을 적어주세요 수

가 나는 행운과 함께 다음을 시도 선택 쿼리에서 작은 따옴표를 읽는 방법을 결정합니다.

편집 : 나는

select failures from dba_jobs where what like "dbms_refresh.refresh%" check_mview_test.sh check_mview_test_v1.ksh check_mview_test_v1.sh get_pageid_test.sh ERROR at line 1: ORA-00904: "dbms_refresh.refresh%": invalid identifier

+0

작은 따옴표만으로는 충분하지 않다고 생각하는 이유는 무엇입니까? 'what like 'dbms_refresh.refresh %'; '를 사용하면 bash (그리고 변종)에서 저에게 잘 작동합니다. 작은 따옴표를 사용할 때 어떤 오류가 발생합니까? –

+0

백 슬래시없이 시도 했습니까? 명령을 쉽게 실행할 수 있습니다. – 0xdb

+0

재미 있습니다. 나는 korn 셸을 사용하고있었습니다. 배시에서 실행 해 보겠습니다. 아쉽게 내 질문을 내 오류로 업데이트하십시오. –

답변

2

ksh93에서 간단한 작은 따옴표로 작동하지만 ksh88은 명령 대체 내에서 작은 따옴표를 큰 따옴표로 변경하거나 헤라 독 (heredoc) 내부에서 변경된 것처럼 보입니다. 그래서, 편집 할 때 작은 따옴표가있는 yoru 질의는 (이중 따옴표로 묶인) 식별자를 보여주는 에러를 보게됩니다.

failures=`sqlplus -s << EOF 
${SQLIN} 
set heading off; 
WHENEVER OSERROR EXIT 9; 
WHENEVER SQLERROR EXIT SQL.SQLCODE; 
select failures from dba_jobs where what like 'dbms_refresh.refresh%'; 
EOF 
` 

또는 당신은 또한 그것을 피할 것 자체 쉘 변수로 문자열을 넣을 수 있습니다; 일부 실험에서

당신은 역 따옴표로 $(...)에서 할당을 변경하여이를 방지 할 수 있습니다 하지만 더 복잡한 쿼리의 경우 실제로 확장되지는 않습니다.

VALUE="'dbms_refresh.refresh%'" 

failures=$(sqlplus -s << EOF 
${SQLIN} 
set heading off; 
WHENEVER OSERROR EXIT 9; 
WHENEVER SQLERROR EXIT SQL.SQLCODE; 
select failures from dba_jobs where what like ${VALUE}; 
EOF 
) 
+1

물론, 그것이 ksh 버전의 문제라는 것을 깨달았지만, 해결 방법을 찾는 대신에 그것을 연구해야했습니다 ... [ksh88에서 heredocs와 잘 알려진 이슈 인 것 같습니다] (http : // stackoverflow. com/q/25569857/266304). 나는 내가 수년 전에 그것을 인식 할지도 모른다라고 생각한다 - 결코 내가 가정하지 않고있다. –

+0

우수, 정말 고마워. 나는'$ (...) '를 역 틱으로 바꾸려고 시도했지만 효과가 있었다. 나는 우리 버전을 업그레이드하는 방법을 살펴볼 것이라고 생각한다. –

0

'dbms_refresh.refresh%'가 작동하는 것 같다 사용하는 경우 아래 있지 않지만 정확하게 "SQLPLUS"에, 내 결과입니다하지만 내 포스트 그레스에 그것을 시도했다.

=>|Fri Feb 17|01:23:36|[email protected][STATION]:/var/lib/pgsql> cat test.sh 
#!/bin/bash 
mytable="$1" 
failures=$(psql <<EOF 
select phonenumber from $mytable where phonenumber like '91%' ; 
EOF 
) 
echo "==========RESULT===========" 
echo $failures 
echo "============END============" 

=>|Fri Feb 17|01:23:39|[email protected][STATION]:/var/lib/pgsql> 

출력 :이 도움이

=>|Fri Feb 17|01:24:12|[email protected][STATION]:/var/lib/pgsql> ./test.sh mdn_2 
==========RESULT=========== 
phonenumber -------------- 919821217792 (1 row) 
============END============ 

=>|Fri Feb 17|01:24:14|[email protected][STATION]:/var/lib/pgsql> 

희망 여기에

는 스크립트입니다. 저희에게 알려주십시오. 감사.