Como usar “$” no SQL plus?

Como usar “$” no SQL plus?

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:

informação relacionada