SQL Plus에서 "$"를 사용하는 방법은 무엇입니까?

SQL Plus에서 "$"를 사용하는 방법은 무엇입니까?

나는 다음과 같은 문제에 직면하고 있습니다.

내 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

추가 자료:

관련 정보