2017-11-16 62 views
0

사람들,쉘 스크립트에서 .sql 스크립트를 호출하는 중 오류가 발생했습니다.

쉘 스크립트에서 1 매개 변수가있는 sql 스크립트를 호출하려고합니다. 다음과 같이 내 스크립트

tab.sql

set lines 500 
col file_name for a80 

select file_name,bytes/1024/1024,maxbytes/1024/1024 
    from dba_data_files 
where tablespace_name=upper('&TAB_NAME'); 
/

내 쉘 스크립트 내가이 스크립트를 실행하면 test.sh이

#!/bin/bash 

LOC=`pwd` 

echo -n "Enter the name of the Tablespace: " 
read -r TAB_NAME 

sqlplus "/ as sysdba" <<- EOF 
@$LOC/tab.sql $TAB_NAME 
EOF 

exit 

입니다 내가 얻고 무엇 있습니다

sh test.sh 
Enter the name of the Tablespace: users 

SQL*Plus: Release 11.2.0.4.0 Production on Thu Nov 16 14:17:45 2017 

Copyright (c) 1982, 2013, Oracle. All rights reserved. 

Connected. 
SQL> Enter value for tab_name: 
SP2-0546: User requested Interrupt or EOF detected. 
Enter value for tab_name: 
SP2-0546: User requested Interrupt or EOF detected. 
SQL> Disconnected 

아무도 나에게 무엇이 잘못되었는지 말해 줄 수 있습니까? 이 SP2-0546에 관한 net 검색했지만 내 문제가 해결되지 않았습니다. 나는 조금 너무 쉘 변수로 혼동 가능성이 OLE-6

감사

답변

1

당신은 namedpositional 대체 변수를 혼합하고를 11.2.0.4 DB를 사용하고 있어요. 은 SQL * Plus 위치 적으로 명령 행에 전달 된 인수를 참조 할 수 있습니다 :

select file_name,bytes/1024/1024,maxbytes/1024/1024 
    from dba_data_files 
where tablespace_name=upper('&1'); 
/

명명 된 대체 변수를 정의 할 수 있습니다 당신에게 원하는 경우; 아마도 과잉 여기지만 더 큰 스크립트에서 명확하게하는 데 유용 할 수 있습니다 :이 버전 &TAB_NAME에 대한 참조가 이 안에 아니라고

define TAB_NAME=upper('&1') 

select file_name,bytes/1024/1024,maxbytes/1024/1024 
    from dba_data_files 
where tablespace_name=&TAB_NAME; 
/

참고 :

define TAB_NAME=&1 

select file_name,bytes/1024/1024,maxbytes/1024/1024 
    from dba_data_files 
where tablespace_name=upper('&TAB_NAME'); 
/

이상 단순화하는 비트를 참조 작은 따옴표는 대체 중에 적용되므로

테스트/디버깅을하는 동안 에 도움이 될 수 있으며, 노이즈를 숨기기 위해 set verify off을 실제로 사용하십시오. sqlplus 호출에 -s 플래그를 포함시켜 배너 텍스트를 숨기는 것이 유용 할 수도 있습니다. 심지어이 경우에는 히어 닥 필요하지 않습니다, 당신도 명령 줄에서 직접 스크립트를 실행할 수 있습니다

sqlplus -s "/ as sysdba" @$LOC/tab.sql $TAB_NAME 

(일상 쿼리 sys로 연결하는 것은 적합하지 않습니다,을 가지고 더 나은 것 쿼리 할 데이터 딕셔너리 테이블을 볼 수있는 권한이있는 일반 사용자이지만 다른 주제입니다 ...)

+0

응답 해 주셔서 감사합니다. 확인해 드리겠습니다. 다시 연락 드리겠습니다. – user3436389