Como usar o “$” no SQL plus?

0

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

mostra-me 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

Acho que é porque na consulta está "$" envolvido, mas não tenho certeza.

Existe uma maneira de executar esse comando no cliente sqlplus usando o Linux como SO?

Se eu estou fazendo algo errado, por favor, me aponte na direção certa.

Detalhes do meio ambiente.

  • O.S = SuSE Linux Enterprise Server 11 SP3
  • Oracle Instant Client = Release 12.1.0.2.0
  • SQLPLUS = SQL * Plus: versão 12.1.0.2.0
por Francisco Tapia 09.12.2015 / 21:34

1 resposta

1

Pelo menos um problema é a sua sintaxe:

sqlplus -S user/[email protected] <<EOF
SELECT INSTANCE_NUMBER, HOST_NAME, STARTUP_TIME, STATUS, DATABASE_STATUS, BLOCKED 
FROM GV$INSTANCE;
EOF

Isso é chamado de "aqui-documento" e variáveis do shell (nomes prefixados com $ ) são normalmente expandidos. Para impedir a expansão, citar o 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ê pode citar isso também (dizendo ao Oracle para ignorar algumas das regras de sintaxe que ele usa 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:

por 09.12.2015 / 22:06