Windows 명령 프롬프트를 통해 SQL Plus를 통해 Oracle 스크립트를 실행하고 싶습니다. 이 스크립트에는 "exit"명령이 포함되어 있지 않지만 SQL Plus를 종료하고 스크립트를 완료하면 명령 프롬프트로 제어권을 반환하고 싶습니다. 내 목표는 스크립트 를 수정 하지 않고이 작업을 수행하는 것입니다 . 이게 가능해?
Windows 명령 프롬프트를 통해 SQL Plus를 통해 Oracle 스크립트를 실행하고 싶습니다. 이 스크립트에는 "exit"명령이 포함되어 있지 않지만 SQL Plus를 종료하고 스크립트를 완료하면 명령 프롬프트로 제어권을 반환하고 싶습니다. 내 목표는 스크립트 를 수정 하지 않고이 작업을 수행하는 것입니다 . 이게 가능해?
답변:
다른 방법은 배치 파일에서이 명령을 사용하는 것입니다.
echo exit | sqlplus user/pass@connect @scriptname
나는 이것이 최선의 해결책이라는 것을 알았으며 터미널이나 스크립트에서 작동합니다.
echo @scriptname | sqlplus username/password@connect
sql 파일 자체에 문제가있을 수 있으므로 sqlplus를 종료하도록 지시해야합니다. 내가하는 방법은 다음과 같습니다.
이중에서 *를 선택하십시오. 떠나다; /
슬래시는 중요하다. 그것은 sqlplus에게 그 위에있는 statemet (s)를 실행하라고 지시한다.
사용자 정보를 숨기고 종료하는 가장 좋은 방법은 다음과 같습니다.
exit | sqlplus -S user/pwd@server @script.sql
exit
sqlplus의 출력에 제공되어 강제 종료됩니다. -S
스크립트에서 sql 쿼리 이외의 모든 서버 출력을 억제합니다.
그렇습니다. SQLPlus를 적절히 설정하고 스크립트 (예 :)를 포함 @YourTargetScript.sql
시킨 다음 종료를 수행하는 래퍼 스크립트를 생성 할 수 있습니다 .
즉,이 방법은 전혀 권장하지 않습니다. SQLPlus에는 프로그래밍 방식으로 사용할 수있는 수많은 문제가 있습니다. 과거에 Oracle을 사용했던 쉘 스크립트를 작성할 때 Python 래퍼를 작성했습니다 (보다 합리적인 오류 처리 동작 추가, stdout / stderr 간의 출력 분리, 기본 CSV 출력 지원 및 기타 그러한 장점). 훨씬 낫다.
이처럼 :
sqlplus / nolog userid / password @ tnsname @ 파일 이름
이것을 배치 파일에 넣으면, 그 뒤에 나오는 명령문으로 제어가 계속됩니다.
편집 : 내 나쁜, / nolog 플래그로 다시 시도하십시오
스크립트에 비밀번호를 포함하는 보안에 대해 걱정하는 사용자를 위해 AskTom에는 "외부 적으로 식별" http : //asktom.oracle.com/pls/apex/f? p = 100 : 11 : 0 :::: P11_QUESTION_ID : 142212348066
SQL 스크립트에서 EXIT를 추가하십시오. 내 test.bat 파일의 예는 다음과 같습니다.
sqlplus 사용자 / pwd @ server @ test.SQL> myLOG.LOG
내 test.sql 파일은 다음과 같습니다. select * from dual; 출구
이탈 | SQLPLUS / @ @
이것은 올바른 해결책입니다. 작동 중입니다.