Запуск SQL запросов через командную строку с sqlplus

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Выполнение запроса в SQLPlus из командной строки без лишних сообщений можно осуществить с помощью echo и оператора пайплайна (|):

Bash
Скопировать код
echo "SELECT SYSDATE FROM dual;" | sqlplus -s пользователь/пароль@база # "Узнайте текущую дату мгновенно!"

Следует заменить пользователь, пароль и база на актуальные учетные данные и название вашей базы данных. Таким образом, вы сможете быстро получить текущую дату из системной таблицы Oracle — dual.

Кинга Идем в IT: пошаговый план для смены профессии

Защитите свои учетные данные

Безопасность при работе с базами данных возможно одна из главных проблематик. Ввод учетных данных непосредственно в команды – это не просто плохая практика, но и серьезный риск. Для защиты информации имеются различные методы, включая использование переменных окружения или кошелька Oracle для надежного хранения конфиденциальных данных.

Bash
Скопировать код
# Никогда не делайте такого дома или на работе!
echo "SELECT SYSDATE FROM dual;" | sqlplus scott/tiger@ORCL

Многострочные запросы с помощью Here documents

Here documents станут вашими союзниками при работе с многострочными или сложными SQL-запросами:

Bash
Скопировать код
sqlplus -s пользователь/пароль@база <<EOF # "Уважаемый SQLPlus, вот что нужно выполнить..."
SELECT department_id, department_name
FROM departments
WHERE location_id = 1700;
EXIT; # "...и завершить эту операцию!"
EOF

Операторы <<EOF и EOF позволяют определить блок команд, которые будут исполнены в SQLPlus прямо из командной строки для выполнения сложных запросов.

Эффективное подключение к SQLPlus

Перед тем как подключаться, убедитесь, что строки подключения имя_пользователя/пароль@хост:порт/сервис соответствуют вашим настройкам:

Bash
Скопировать код
sqlplus -s пользователь/пароль@localhost:1521/ORCL # "Попытка подключения к SQLPlus по указанному порту"

Для более эффективного подключения используйте ключ -s. Он подавляет излишек сообщений, позволяя получить чистый вывод и сохранить спокойствие разработчика.

Визуализация

Операцию выполнения команды в терминале можно представить как экспресс-доставку:

Markdown
Скопировать код
🚂💨💼🖥️

Пояснение:

Markdown
Скопировать код
🚂 – Поводырь командной строки начинает работать
💨 – Высокая скорость выполнения операции
💼 – Пакет запросов SQLPlus в пути
🖥️ – База данных, ожидающая выполнения

Основная идея: Скорость и предсказуемость в выполнении SQL-запросов.

Без лишнего: лучшие запросы

Создание временных файлов может усложнить процесс работы, когда можно выполнить однострочную команду и получить результат прямо в терминале.

Bash
Скопировать код
echo "SELECT SYSDATE FROM dual;" | sqlplus -s пользователь/пароль@база # "Держим всё под контролем!"

Этот метод позволяет мгновенно видеть результаты запросов прямо в терминале.

Работа со сложными SQL-запросами

Для сложных SQL-запросов команда echo -e облегчает форматирование и делает их более читаемыми:

Bash
Скопировать код
echo -e "SELECT \\n department_id, \\n department_name \\nFROM departments;" | sqlplus -s пользователь/пароль

Итак, давайте сделаем наши SQL-запросы удобными для восприятия и минимально нагружающими ресурсы!

Защитите свои скрипты

Очень важно придерживаться тщательной гигиены в отношении имен пользователей и паролей при внедрении команд SQLPlus в скрипты. В автоматизированных сценариях всегда стоит использовать параметризацию или криптографические методы.

Bash
Скопировать код
# При работе со скриптами с безопасностью не шутят! (Если, конечно, вы не хакер.)

Полезные материалы

  1. Руководство для пользователя и справочная информация по SQL*Plus 19c — официальная документация Oracle по SQL*Plus.
  2. Вопросы — Ask Tom, ваш дружелюбный советник по SQL*Plus.
  3. Как передавать переменные из shell-скриптов в SQL*Plus — стоит прочитать эту статью, чтобы повысить эффективность ваших скриптов.