Как использовать «$» в SQL plus?

Как использовать «$» в SQL plus?

Я столкнулся со следующей проблемой.

Когда я пытаюсь выполнить следующую команду в sqlplus в моем SLES:

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

Полагаю, это потому, что в запросе присутствует «$», но я не уверен.

Есть ли способ запустить эту команду в клиенте sqlplus, используя Linux в качестве ОС?

Если я делаю что-то неправильно, пожалуйста, укажите мне правильное направление.


Подробности об окружающей среде.

  • ОС = SuSE Linux Enterprise Server 11 SP3
  • Oracle Instant Client = Выпуск 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

Дальнейшее чтение:

Связанный контент