![Como usar “$” no SQL plus?](https://rvso.com/image/1476398/Como%20usar%20%E2%80%9C%24%E2%80%9D%20no%20SQL%20plus%3F.png)
Estou enfrentando o seguinte problema.
Quando tento executar o seguinte comando no sqlplus no meu SLES:
sqlplus -S user/[email protected] <<EOF
SELECT INSTANCE_NUMBER, HOST_NAME, STARTUP_TIME, STATUS, DATABASE_STATUS, BLOCKED
FROM GV$INSTANCE;
EOF
me mostra o seguinte erro:
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
Suponho que seja porque na consulta está "$" envolvido, mas não tenho certeza.
Existe uma maneira de executar esse comando no cliente sqlplus usando Linux como sistema operacional?
Se eu estiver fazendo algo errado, indique-me a direção certa.
Detalhes do ambiente.
- SO = SuSE Linux Enterprise Server 11 SP3
- Cliente Instantâneo Oracle = Versão 12.1.0.2.0
- SQLPLUS = SQL*Plus: Versão 12.1.0.2.0
Responder1
Pelo menos um problema é a sintaxe do seu shell:
sqlplus -S user/[email protected] <<EOF
SELECT INSTANCE_NUMBER, HOST_NAME, STARTUP_TIME, STATUS, DATABASE_STATUS, BLOCKED
FROM GV$INSTANCE;
EOF
Isso é chamado de "documento aqui" evariáveis de shell(nomes prefixados com $
) são normalmente expandidos. Para evitar a expansão,citaro primeiro uso de EOF
, por exemplo,
sqlplus -S user/[email protected] <<"EOF"
SELECT INSTANCE_NUMBER, HOST_NAME, STARTUP_TIME, STATUS, DATABASE_STATUS, BLOCKED
FROM GV$INSTANCE;
EOF
Outro problema pode ser o caractere especial no nome da tabela. Você também pode citar isso (dizendo ao Oracle para ignorar algumas das regras de sintaxe usadas para SQL). A melhoria ficaria assim:
sqlplus -S user/[email protected] <<"EOF"
SELECT INSTANCE_NUMBER, HOST_NAME, STARTUP_TIME, STATUS, DATABASE_STATUS, BLOCKED
FROM "GV$INSTANCE";
EOF
Leitura adicional: