나는 다음과 같은 문제에 직면하고 있습니다.
내 SLES의 sqlplus에서 다음 명령을 실행하려고 하면:
sqlplus -S user/[email protected] <<EOF
SELECT INSTANCE_NUMBER, HOST_NAME, STARTUP_TIME, STATUS, DATABASE_STATUS, BLOCKED
FROM GV$INSTANCE;
EOF
그것은 나에게 다음과 같은 오류를 보여줍니다 :
SQL> SELECT INSTANCE_NUMBER, HOST_NAME, STARTUP_TIME, STATUS, DATABASE_STATUS, BLOCKED FROM GVINSTANCE
*
ERROR at line 1:
ORA-00942: table or view does not exist
쿼리에 "$"가 관련되어 있기 때문인 것 같지만 확실하지 않습니다.
Linux를 OS로 사용하여 sqlplus 클라이언트에서 해당 명령을 실행할 수 있는 방법이 있습니까?
내가 뭔가 잘못하고 있다면 올바른 방향을 알려주세요.
환경 세부정보.
- OS = SuSE Linux Enterprise Server 11 SP3
- Oracle 인스턴트 클라이언트 = 릴리스 12.1.0.2.0
- SQLPLUS = SQL*Plus: 릴리스 12.1.0.2.0
답변1
적어도 한 가지 문제는 쉘 구문입니다.
sqlplus -S user/[email protected] <<EOF
SELECT INSTANCE_NUMBER, HOST_NAME, STARTUP_TIME, STATUS, DATABASE_STATUS, BLOCKED
FROM GV$INSTANCE;
EOF
이를 "여기 문서"라고 합니다.쉘 변수(접두사가 붙은 이름 $
)은 일반적으로 확장됩니다. 확장을 방지하기 위해,인용하다의 첫 번째 사용 EOF
예:
sqlplus -S user/[email protected] <<"EOF"
SELECT INSTANCE_NUMBER, HOST_NAME, STARTUP_TIME, STATUS, DATABASE_STATUS, BLOCKED
FROM GV$INSTANCE;
EOF
또 다른 문제는 테이블 이름의 특수 문자일 수 있습니다. 이를 인용할 수도 있습니다(Oracle에게 SQL에 사용하는 일부 구문 규칙을 무시하도록 지시). 개선 사항은 다음과 같습니다.
sqlplus -S user/[email protected] <<"EOF"
SELECT INSTANCE_NUMBER, HOST_NAME, STARTUP_TIME, STATUS, DATABASE_STATUS, BLOCKED
FROM "GV$INSTANCE";
EOF
추가 자료: