The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Автозавершение команд в оболочке sqlplus для Oracle (sql shell oracle)


<< Предыдущая ИНДЕКС Исправить src / Печать Следующая >>
Ключевые слова: sql, shell, oracle,  (найти похожие документы)
From: sapran <sapran@gmail.com.> Newsgroups: email Date: Mon, 8 Jan 2007 14:31:37 +0000 (UTC) Subject: Автозавершение команд в оболочке sqlplus для Oracle Чем больше я узнаю UNIX, тем больше я люблю Linux. Чем больше я узнаю Oracle, тем больше я люблю Postgres. Гигантские продукты именитых вендоров не очень-то комплексуют по поводу юзерленда, вернее его полного отсутсвия. "Мы делаем ядро", говорят они, "и обеспечиваем его максимальную производительность". А на удобство интерфейса нам, мягко говоря, не хватает времени. Одним из примеров этого безобразия может служить sqlplus, cli для СУБД Oracle. Большинство cli, используемых нами в повседневной жизни, написаны с поддержкой GNU readline. Использование этой библиотеки позволяет сохранять историю команд и пользоваться такой чудесной функцией, как автозаполнение команд. Последняя обычно выполняется по нажатию табуляции в завершении какой-либо последовательности символов, с которой предположительно начинается команда. Так вот, первое знакомство с Oracle неизменно вызывает недоумение, почему в sqlplus readline'а нет? Тайна сия велика есть и да поможет вам Google в поисках ее разгадки. Но для начала немного практики. Хвала опенсорсу, в природе существует readline-wrapper под красноречивым названием rlwrap. Это чудо запускает cli без поддержки readline и служит readline-based интерфейсом к недоразвитой утилите. Как нам это моможет в борьбе с Ораклом? Рассказываю. Во-первых установите rlwrap. Процедура установки уникальна в контексте каждой ОС, у меня на сервере БД SUN Solaris 10, посему # pkg-get -i rlwrap или, если вы предпочитаете не пользоваться сомнительными репозитариями, -- добро пожаловать на http://www.sunfreeware.com Далее, создаем алиас для "заворачиваемой" утилиты, прописывая в .bashrc (или чем вы там пользуетесь для входа в Матрицу) alias sqlplus='rlwrap sqlplus' Затем логаут/логин или . .bashrc -- это на на ваш вкус -- и пробуем подсоединиться к БД. Вводим парочку запросов и, о чудо!, нажатие вертикальных курсорных стрелок перебирает историю команд! Сама история при этом сохраняется, как это ни странно, в файле ~/.sqlplus_history. Следующий шаг -- автозаполнение. Я немного слукавил, возложив эту фичу на совесть readline в начале статьи. На самом деле каждый разработчик справляется с этим самостоятельно. Кто-то идет дальше -- как Postgres -- и позволяет подставить контекстный выбор элементов БД после каждого ожидающего этого элемента оператора. Некторые -- как MySQL -- останавливаются на подстановке ключевых слов, зарезервированных в СУБД. Мы выберем второй вариант, так как Постгрес хоть и крут, но эти фокусы у него не всегда получаются. Ладно, буду откровенен -- первый вариант очень сложен в реализации =) Итак, в .bashrc правим нашу команду до такого вида: alias sqlplus='rlwrap -f ~/.sqlplus_completions sqlplus' И наконец, автозавершение операторов заработает после того, как вы создите файл ~/.sqlplus_completions следующего содержания: [oracle@dozor:~]$ cat ~/.sqlplus_completions ALL all ALTER alter AND and ANY any ARRAY array ARROW arrow AS as ASC asc AT at BEGIN begin BETWEEN between BY by CASE case CHECK check CLUSTERS clusters CLUSTER cluster COLAUTH colauth COLUMNS columns COMPRESS compress CONNECT connect CRASH crash CREATE create CURRENT current DECIMAL decimal DECLARE declare DEFAULT default DELETE delete DESC desc DISTINCT distinct DROP drop ELSE else END end EXCEPTION exception EXCLUSIVE exclusive EXISTS exists FETCH fetch FORM form FOR for FROM from GOTO goto GRANT grant GROUP group HAVING having IDENTIFIED identified IF if IN in INDEXES indexes INDEX index INSERT insert INTERSECT intersect INTO into IS is LIKE like LOCK lock MINUS minus MODE mode NOCOMPRESS nocompress NOT not NOWAIT nowait NULL null OF of ON on OPTION option OR or ORDER,OVERLAPS order,overlaps PRIOR prior PROCEDURE procedure PUBLIC public RANGE range RECORD record RESOURCE resource REVOKE revoke SELECT select SHARE share SIZE size SQL sql START start SUBTYPE subtype TABAUTH tabauth TABLE table THEN then TO to TYPE type UNION union UNIQUE unique UPDATE update USE use VALUES values VIEW view VIEWS views WHEN when WHERE where WITH with Ключевые слова взяты отсуда. Удачи!

<< Предыдущая ИНДЕКС Исправить src / Печать Следующая >>

 Добавить комментарий
Имя:
E-Mail:
Заголовок:
Текст:




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру