2013-02-23 2 views
1

두 함수 -ABC, XYZ가 있습니다. ABC는 table1의 일부 행을 user1로 삭제하고 XYZ는 일부 사용자를 DB User로 삭제합니다. 먼저 ABC를 호출하고 XYZ를 호출합니다. ABC 기능을 실행하지만, XYZ에서이 failing- "XYZ : 명령을 찾을 수 없습니다"입니다되고있다 두 함수를 차례로 호출하면 bash/sqlplus에서 실패합니다.

function ABC 
{ 
     sqlplus -s $ur1/[email protected]$SID << EOF 

     delete from table1 where row_name = 'A1'; 
     delete from table2 where row_name = 'A2'; 
     exit 

     EOF 
} 

function XYZ 
{ 
sqlplus eip_dba/[email protected]${input} << eof 
set timing off 
set serveroutput on size 10000 
set feedback off 
spool xyz_$input.out 

drop user usr1 cascade; 
drop user usr2 cascade; 
drop user usr3 cascade; 
commit; 
exit 
eof 
} 

ABC 
XYZ 

bash-3.2$ ./db_test.sh 

2 rows deleted. 


2 rows deleted. 

./db_test.sh: line 100: XYZ: command not found 

나에게 무엇이 잘못되었는지 알려 주시기 바랍니다.

미리 감사드립니다. 공백을 제거

+0

감사합니다. 나는 지금부터이 팁을 사용할 것이다. – itsh

답변

4

시도 EOF

function ABC 
{ 
     sqlplus -s $ur1/[email protected]$SID << EOF 

     delete from table1 where row_name = 'A1'; 
     delete from table2 where row_name = 'A2'; 
     exit 

EOF 
} 

전에 샘플 프로그램에서 이것을 시도하고 문제를 해결.

<<WORD 
here-document content ... 
    here-document content ... 
    here-document content ... 
WORD 

WORD 당신이 원하는 라벨이 될 수 있지만, 최종 마커 라인에있는 유일한 것은, 이전 또는 이후 어떤 공백해야합니다 : 여기-문서의

+0

감사합니다. 그게 효과가있어! – itsh

0

형식입니다. 귀하의 예제 기능에서

당신은 같은 라인의 시작 부분에 정말 있도록 그들의 앞에에서 공백 문자를 제거해야합니다, 라벨 등 eofEOF을 사용하고 있습니다 :

function ABC 
{ 
     sqlplus -s $ur1/[email protected]$SID << EOF 

     delete from table1 where row_name = 'A1'; 
     delete from table2 where row_name = 'A2'; 
     exit 

EOF 
} 

function XYZ 
{ 
sqlplus eip_dba/[email protected]${input} << eof 
set timing off 
# ... and so on .... 

eof 
} 

즉, 끝 부분 인 EOFeof이 줄의 시작 부분에 있으며 뒤에 공백이 없습니다.

+0

감사합니다. 그게 지금 나에게 효과적이야. – itsh

+0

누군가가 어떻게 코멘트를 추가 할 수있는 코드를 삽입 할 수 말해 줄 수 stackoverflow 영역에서? 새 스레드를 시작할 때마다. 대신 동일한 스크립트에 대한 몇 가지 추가 질문이있는 단일 스레드가 필요합니다. – itsh

관련 문제