Oracle SQL 스크립트를 실행하고 명령 프롬프트를 통해 sqlplus.exe를 종료하십시오.


114

Windows 명령 프롬프트를 통해 SQL Plus를 통해 Oracle 스크립트를 실행하고 싶습니다. 이 스크립트에는 "exit"명령이 포함되어 있지 않지만 SQL Plus를 종료하고 스크립트를 완료하면 명령 프롬프트로 제어권을 반환하고 싶습니다. 내 목표는 스크립트 수정 하지 않고이 작업을 수행하는 것입니다 . 이게 가능해?


"sqlplus .... <scriptname"또는 "sqlplus ... @scriptname"으로 이것을 실행하고 있습니까 ?? Unix에서 수행하는 작업에 따라 다른 동작을 찾습니다.
runrig 2016 년

답변:


140

다른 방법은 배치 파일에서이 명령을 사용하는 것입니다.

echo exit | sqlplus user/pass@connect @scriptname

1
시원한! "exit"이 sqlplus 세션에 어떻게 추가되는지 알고 있습니까?

6
sqlplus 명령은 스크립트를 실행 한 다음 표준 입력에서 더 많은 명령을 읽으려고합니다. 이 파이프 라인을 사용하면 표준 입력에서 읽은 값이 echo 명령에서 "exit"문자열을 읽어 sqlplus가 종료됩니다.
Dave Costa

우수-이것은 내가 찾던 것입니다. 감사!
JoshL

4
유닉스 (ps -ef)의
프로세스

3
stackoverflow.com/questions/1639704/…dba.stackexchange.com/a/65064/16892 는 명령 행에서 비밀번호를 사용하지 않아도되는 몇 가지 방법을 설명합니다.
rogerdpack

13

나는 이것이 최선의 해결책이라는 것을 알았으며 터미널이나 스크립트에서 작동합니다.

echo @scriptname | sqlplus username/password@connect

1
이것은 기술적으로 질문에 대답 할 수 있지만, 실질적으로 다른 답변과 중복되며 가치가 거의 없습니다. 또한 이러한 명령이 수행하는 작업을 설명하면 다른 사람들을 도울 것입니다. 감사합니다!
Chris S

5
이것은 저에게 효과적이며 '종료'를 피하기 때문에 최상위 답변보다 더 우아합니다.
Bogdan Calmac 1

12

sql 파일 자체에 문제가있을 수 있으므로 sqlplus를 종료하도록 지시해야합니다. 내가하는 방법은 다음과 같습니다.

이중에서 *를 선택하십시오.

떠나다;
/

슬래시는 중요하다. 그것은 sqlplus에게 그 위에있는 statemet (s)를 실행하라고 지시한다.


Dave Costa의 답변도 효과가 있습니다. sqlplus 명령으로 exit를 종료 (또는 종료)하십시오.

/ 트릭 주셔서 감사합니다, 나는이 정보를 찾고 있었다!

2
슬래시는 SQL 버퍼에있는 것을 실행하는 것을 의미합니다. 여러 명령문을 실행하지 않으며 "quit"과 같은 SQLPlus 제어 명령을 실행할 필요가 없습니다. 대화식 SQLPlus 프롬프트에서 "quit"<Enter>를 입력하면 즉시 종료됩니다.
Dave Costa

12

사용자 정보를 숨기고 종료하는 가장 좋은 방법은 다음과 같습니다.

exit | sqlplus -S user/pwd@server @script.sql

exitsqlplus의 출력에 제공되어 강제 종료됩니다. -S스크립트에서 sql 쿼리 이외의 모든 서버 출력을 억제합니다.


2
ssh를 사용하면 종료 | 종료 대신 | 종료하거나 종료하도록 파일을 나중에 편집하는 경우 ssh 세션이 닫히지 않습니다. 파일을 찾지 못하면 작동합니다.
Karl Henselin

6

쉘 스크립트에서도이를 수행 할 수 있습니다.

sqlplus /nolog <<EOF
connect user/pass
@run_some_file.sql
select * from dual;
EOF

";"을 탈출해야 할 수도 있습니다. 와 함께.


3

그렇습니다. SQLPlus를 적절히 설정하고 스크립트 (예 :)를 포함 @YourTargetScript.sql시킨 다음 종료를 수행하는 래퍼 스크립트를 생성 할 수 있습니다 .

즉,이 방법은 전혀 권장하지 않습니다. SQLPlus에는 프로그래밍 방식으로 사용할 수있는 수많은 문제가 있습니다. 과거에 Oracle을 사용했던 쉘 스크립트를 작성할 때 Python 래퍼를 작성했습니다 (보다 합리적인 오류 처리 동작 추가, stdout / stderr 간의 출력 분리, 기본 CSV 출력 지원 및 기타 그러한 장점). 훨씬 낫다.


다른 프로그램을 사용하면 동의합니다. 그러나 SQLPlus는 다른 환경 (내 경우에는 Perl / DBI / DBD :: Oracle) 이하 지 않은 잘못된 쿼리에 대한 유용한 컨텍스트를 제공한다는 것을 알았습니다. 신중하게 오류를 처리하고 있다면 그만한 가치가 있습니다.

또한 서버에 대한 제어 수준에 따라 셸 및 SQLPlus 이외의 항목을 사용할 수 있다고 가정하거나 수행하지 못할 수 있습니다. Solaris, HP / UX, AIX 등을 실행하는 많은 stoixer unix 상점은 매우 베어 설치를 사용하므로 상자에 다른 것을 설치할 수 없습니다. 때로는 이것에 대한 해결 방법은 최소한의 인터프리터를 응용 프로그램과 함께 제공하는 것입니다.
ConcernedOfTunbridgeWells

3

이처럼 :

sqlplus / nolog userid / password @ tnsname @ 파일 이름

이것을 배치 파일에 넣으면, 그 뒤에 나오는 명령문으로 제어가 계속됩니다.

편집 : 내 나쁜, / nolog 플래그로 다시 시도하십시오


불행히도 이것은 작동하지 않습니다. 배치 파일을 실행할 때 SqlPlus는 명령 프롬프트로 제어를 반환하는 대신 SQL> 프롬프트에서 사용자 입력을 기다립니다.
JoshL

죄송합니다. 작동하지 않습니다. / nolog를 사용하면 로그온하지 않고 sqlplus를 시작할 수 있습니다. 완료되면 스크립트를 종료하는 것과 아무 관련이 없습니다.
JoshL

흠, 나는 환경의 차이에 대해 궁금해지기 시작했다. 이 방법으로 sqlplus를 사용하는 수많은 bat 스크립트가 있습니다.

크리스, 실례를 들어 줄래? "이중에서 선택 *"을 실행하는 단순한 것 또는 무언가 ... 나는 당신의 제안을 시험해보기 위해 예제를 만들었습니다. 이것은 Windows에 있음을 기억하십시오.
JoshL

조쉬, 아래에서 새로운 답변을보십시오.


0

SQL 스크립트에서 EXIT를 추가하십시오. 내 test.bat 파일의 예는 다음과 같습니다.

sqlplus 사용자 / pwd @ server @ test.SQL> myLOG.LOG

내 test.sql 파일은 다음과 같습니다. select * from dual; 출구


괜찮지 만 exit / quit 문을 포함하도록 스크립트를 수정하지 않고이 요구 사항을 충족하지 못합니다. 이러한 스크립트는 SQL Plus의 DBA에서 실행할 수 있지만 배치 파일에서도 실행할 수 있습니다.
JoshL 2016 년

0

이탈 | SQLPLUS / @ @

이것은 올바른 해결책입니다. 작동 중입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.