sql plus как запустить скрипт
Sql plus как запустить скрипт
Работа с внешними файлами из Oracle SQL*Plus, команды GET, START, символы @ и @@, команды SAVE и SPOOL
Для запуска внешнего файла можно также использовать формат @@имя_файла. Отличие между применением одного символа At (@) и двумя символами At (@@) — в их поведении, когда полный путь к файлу скрипта не указан. Обычно при использовании двух символов @@ в ситуации, когда этой командой запускается один скрипт из другого скрипта, поиск второго скрипта будет производиться SQL*Plus в том же каталоге, в котором находится первый скрипт. Если же использовать один символ @, то поиск будет производиться в каталоге скриптов по умолчанию (зависит от операционной системы и установленных экземпляров Oracle ).
Сохранить содержимое буфера SQL*Plus в файле можно при помощи команды SAVE :
Для команды SAVE можно указать дополнительные параметры:
SAVE c:\MyScript.sql APP
Часто возникает необходимость записать результаты выполнения запросов SQL*Plus в файл. Для этой цели используется команда SPOOL :
Отметим некоторые моменты, связанные с перенаправлением вывода SPLPlus в файл:
· если расширение для файла не указано, по умолчанию SQL*Plus добавит расширение lst ;
· перенаправлять вывод можно не только в файл, но и на служебные устройства операционной системы (принтер, NULL ) и т.п.;
· команду SPOOL можно использовать для формирования результатов выполнения запросов в формате HTML ;
Отметим, что запуск внешнего скрипта на выполнение и запись результатов во внешний файл можно осуществить и при помощи параметров командной строки SQL*Plus (см. раздел 1.2.2).
Шпаргалка по SQL*Plus
К написанию этой статьи меня подтолкнула книга «Oracle SQL*Plus: The Definitive Guide, 2nd Edition», написанная Jonathan Gennick. Как обычно, появилось желание систематизировать информацию и представить ее в удобном виде.
При этом сразу считаю нужным оговориться, что я использую SQLplus для написания и выполнения скриптов на удаленных машинах, в этой статье описываю именно используемые для этого команды.
Параметры, подключение к базе, запуск скриптов
Выполнить несколько строк кода (не передавая отдельный файл со скриптом), unix:
Выполнение SQL запросов
Запрос может состоять из нескольких строк, содержать комментарии, но не может содержать внутри пустые строки.
Запрос может быть выполнен тремя способами:
Выполнение PL/SQL блоков
Пример PL/SQL блока:
Правила выполнения PL/SQL блоков:
Сигнал к выполнению блока может быть подан двумя путями:
Одиночное выражение PL/SQL может быть выполнено, используя:
В случае ошибок, при выполнении процедуры, можно отобразить их выполнив команду:
Работа с переменными
Переменные могут быть заданы двумя способами:
Если уже была определена &&variable, то значение будет подставлено во все дальнейшие переменные как &variable так и &&variable.
ACCEPT можно использовать для валидации:
Для ввода дат в определенном формате:
SQL*Plus поддерживает четыре типа переменных: CHAR, NUMBER, BINARY_FLOAT, and BINARY_DOUBLE. При вводе с клавиатуры переменная будет типа CHAR.
Несмотря на это, можно использовать NEW_VALUE, чтобы задать числовую переменную, полученную как результат запроса.
Bind-переменные могут использоваться для передачи данных между PL/SQL и SQL блоками:
Присвоить bind-переменной значение &-переменной:
Вывести значение bind-переменной:
Присвоить &-переменной значение bind-переменной:
Получаем OUT-параметр процедуры в bind-переменную:
Условное выполнение в SQLplus:
Пример скрипта, принимающего несколько переменных на вход в формате c возможностью задать дефолтные значения:
Настройки выполнения скриптов
Действуют на протяжении сессии в SQLplus.
Запомнить настройки перед выполнением скрипта и вернуть обратно по завершении выполнения:
Другие команды
Взаимодействие с unix shell
Обработать результат выполнения SQLplus-скрипта в Unix:
Вернуть код ответа в Unix:
Вывод из скрипты в переменную командной строки unix:
ОГЛАВЛЕНИЕ
Запуск SQL*Plus и выход из него
В версиях для операционных систем Microsoft использовались другие имена команды для вызова SQL*Plus, например, sqlplus30. В настоящее время (начиная с версии 8.1.5) в этих операционных системах имеется две версии этой утилиты: sqlplus, работающая в окне командной строки, и оконная версия, sqlplusw.
Общий синтаксис вызова SQL*Plus имеет вид:
Опции командной строки
Как следует из синтаксиса, при вызове SQL*Plus можно указать ряд опций. Они кратко описаны в табл. 1.
Таблица 1. Опции командной строки утилиты SQL*Plus.
Опция | Назначение |
HELP | Выдает информацию об использовании и синтаксисе вызова команды sqlplus и завершает работу. |
VERSION | Выдает информацию о версии утилиты SQL*Plus и завершает работу. |
MARKUP | Опция MARKUP позволяет генерировать полную HTML-страницу по результатам запроса или сценария. |
RESTRICT | Позволяет отключить ряд команд, взаимодействующих с операционной системой. Если указан уровень ограничения 3, сценарий login.sql в текущем каталоге не читается. Стандартный сценарий запуска glogin.sql читается, но ограниченные команды в нем не работают. Команды, недопустимые на каждом из уровней ограничения, представлены ниже в табл. 2. |
SILENT | Подавляет выдачу всех информационных сообщений и приглашений SQL*Plus, включая приглашение командной строки, эхо команд и начальную информацию, обычно выдаваемую при входе в SQL*Plus. Используется при вызове SQL*Plus из другой программы, когда его желательно скрыть, и совместно с опцией MARKUP при создании Web- отчетов. |
Таблица 2. Команды, отключаемые уровнями ограничения.
Команда | Уровень 1 | Уровень 2 | Уровень 3 |
EDIT | отключена | отключена | отключена |
GET | отключена | ||
HOST, ! | отключена | отключена | отключена |
SAVE | отключена | отключена | |
SPOOL | отключена | отключена | |
START, @, @@ | отключена | ||
STORE | отключена | отключена |
Регистрационная информация
Если указано имя пользователя и не указан пароль, SQL*Plus запросит только пароль. При установке опции SILENT, приглашения для ввода имени пользователя и пароля не выдаются, введенное имя пользователя отображается, а пароль, как обычно, нет.
Назначение роли позволяет получить привилегированное подключение пользователям, имеющим системные привилегии SYSOPER или SYSDBA. Такое привилегированное подключение можно получить и при запуске с опциями / или /NOLOG. При указании роли пользователя во многих операционных системах (например, в NT) необходимо взять все аргументы команды в кавычки:
Опция /NOLOG позволяет запустить утилиту SQL*Plus без регистрации. Прежде, чем выполнять любые SQL-операторы, придется выполнить команду CONNECT для подключения. Эта опция обычно используется при запуске сценариев, явно подключающихся к базе данных с помощью команды CONNECT.
Начальный сценарий
При запуске можно выполнить начальный сценарий (файл с командами SQL*Plus, операторами SQL и анонимными PL/SQL-блоками) и передать ему аргументы. Этот файл может находиться в локальной файловой системе или (только в версии 9.0.1 для Windows) на Web-сервере. Начальный сценарий запускается так же, как если бы он был передан в качестве аргумента команде START.
Если для начального сценария не указан суффикс в имени файла, используется суффикс. заданный командой SET SUFFIX (по умолчанию, .sql).
Использование профилей сайта и пользователя
Примечание Здесь и далее $ORACLE_HOME означает начальный каталог, в который установлено используемое программное обеспечение Oracle. При указании имен файлов и каталогов используются соглашения ОС UNIX.
В случае неудачной регистрации (после трехкратного запроса имени пользователя и пароля), утилита SQL*Plus завершает работу с кодом возврата, аналогичным получаемому по команде EXIT FAILURE.
Выход из SQL*Plus
Для выхода из SQL*Plus необходимо ввести команду EXIT. Будет выдана информация о версии сервера, к которому была подключена утилита, и о версии SQL*Plus. Затем работа программы завершается и либо закрывается окно, либо вы получаете приглашение командной строки операционной системы.
Команда EXIT имеет следующий синтаксис:
::= EXIT [ ][ ]
QUIT [ ][ ] ::= SUCCESS / FAILURE / WARNING
/ / / : ::= COMMIT / ROLLBACK
По умолчанию при выполнении команды EXIT SQL*Plus фиксирует текущую транзакцию и завершает работу с кодом возврата 0 (SUCCESS).
Sql plus как запустить скрипт
Что, пошли дальше? База созданная типовой установкой, работает!? Замечательно! Теперь давайте попробуем сделать что-то полезное! Тем более, что уже руки наверное чешутся! Думаю пришло самое время обратить внимание на приложение с именем SQL Plus!
Запускайте! В первом шаге мы уже запускали SQL Plus! Но только для того, чтобы убедиться, что все нормально. Сейчас с помощью «Плюса», мы попробуем научиться самым азам работы с сервером БД и немного поизображать админа БД. Итак, запустили?
В поле «Имя польз.:», пишем system, в поле «пароль:» пишем manager, а вот в поле «Строка связи:» пишем то самое имя сетевой службы, созданное в прошлый раз. Если мне не изменяет память, то звали ее PROBA! Если все прошло хорошо, то мы увидим примерно следующее:
Это значит, что все прекрасно, и вы как администратор допущены в самое сердце вашего сервера Oracle! Объясню сразу и без вариантов, здесь будет рассматриваться работа и примеры в командной строке SQL Plus! Никаких красивых, визардов и волшебников не БУДЕТ. И вот почему, если вы действительно хотите усвоить довольно мощную БД oracle, а так же ее встроенный язык программирования PL/SQL, то начинать будем, с КОММАНДНОЙ СТРОКИ! Я в свое время навидался, крутых, навороченных, молодых людей, которые понятия не имели, не то что о возможности, а даже не подозревали, что каталог создается, в командной строке DOS! 🙂 К стати вопрос на засыпку, а как создать каталог на диске в строке DOS?
Так что, тот, кто привык ставить галочки в визардах, советую, немного напрячь воображение или. ну это уже решать вам! 🙂 Так же могу сказать, что SQL Plus, действительно имеет ряд недостатков и конечно же в дальнейшем, мы перейдем на что-то более передовое, Но. Как инструмент для истинного знатока администрирования БД Oracle, это то что, как раз и достаточно! Вот так. 🙂 Ладно, хватит болтать, пора действовать!
В ответ на это приглашение
Введите примерно следующее:
Нажмите Enter и увидите:
Это интерпретатор команд предлагает ввести следующую строку для вашего выражения если написать, что-то еще, то появится:
То есть среда предлагает вам ввести выражение построчно столько сколько нужно! Например, если вы намереваетесь, записать какой либо сложный запрос!
Да, но нам нужно выполнить только один короткий оператор и увидеть результат!
Да запросто! Там где было 2, введите символ «/» и снова нажмите Enter это означает, что вы закончили ввод и собираетесь, получить результат!
Я получил примерно следующее:
Что значит, что, пользователь SYSTEM, имеет в своей схеме 64 объекта БД! Если фраза не совсем понятна, пока не напрягайтесь все будет далее. 🙂
Сейчас в ответ на приглашение SQL> введите еще раз «/» и Enter!
Это значит, что наше выражение где-то внутри и поле ввода «/» может выполняться хоть сто раз! Еще выражение «/» можно заменить, написав RUN вот так:
Видите, теперь мы снова увидели выражение, которое содержится в строковом буфере и поле нажатия Enter не нужно больше ничего!
Если же вы просто хотите посмотреть весь строковый буфер SQL Plus, то введите примерно следующее:
А вот и сам строковый буфер!
Еще она полезная команда SQL Plus это EDIT, на ней остановимся подробнее.
После нажатия Enter появится Блокнот, мое любимое орудие при написании скриптов PL/SQL. В окне блокнота, будет строка:
Если ничего не менять, то она же и останется, если вместо нее написать, например:
То при закрытии будет задан вопрос: Сохранить изменения в файле afiedt.buf!
Вот он то и содержит, то, что хранит буфер, а лежит он обычно в каталоге C:\Oracle\Bin! Говорим да сохранить, и видим следующее:
Что-то не то, а! Вводим «/»! Упсс, получилось!
У пользователя SYSTEM 17 таблиц в схеме! Просто замечательно! Еще можно делать следующее, создайте каталог на вашем диске, скажем Temp и поместите в него файл содержащий следующее:
Откроется Блокнот и покажет содержимое файла, вроде бы бесполезно, но не совсем. дальше пригодится! Да, напоследок еще пара полезных команд, если экран SQL Plus сильно захламлен введите CLEAR SCREEN и будет чисто! Если надоели команды в буфере напиши CLEAR BUFFER и привет. Все очистится! Пока можете потренироваться с вышеизложенным, но советую сменить пользователя, так как работа в этом может при неосторожных действиях завалить сервер. Как менять пользователя на ходу и кое что еще в следующем шаге!
Использование SQL*Plus и Oracle Enterprise Manager
Подключаться и работать с базами данных Oracle можно многими способами.Однако чаще всего для этого применяется предлагаемый в Oracle интерфейс и набор команд SQL*Plus. Интерфейс SQL*Plus, по сути, открывает окно в базу данных Oracle и потому очень широко используется разработчиками Oracle для создания программных единиц SQL и PL/SQL. Для администраторов баз данных Oracle этот интерфейс тоже является очень ценным инструментом по следующим причинам.
В этой статье я начинаю рассказывать о том, как использовать SQL*Plus для выполнения типичных задач по администрированию баз данных Oracle, о важных командах SQL*Plus, а также, вкратце, о том, как с помощью SQL*Plus создавать отчеты. Возможно, применять интерфейс SQL*Plus для создания большинства отчетов и не придется, но знать,как работают его многочисленные средства для генерации отчетов, совершенно не помешает.
Запуск сеанса SQL*Plus
Интерфейс SQL*Plus представляет собой утилиту, которая чаще всего применяется для подключения и работы с базами данных Oracle. Он поставляется в составе как серверного программного обеспечения Oracle Database 11g, так и клиентского программного обеспечения Oracle Client, а также нового программного обеспечения Oracle Instant Client.
После установки SQL*Plus на сервере или клиентской машине процесс подключения к серверу или клиенту и запуска сеанса SQL*Plus выглядит очень просто. Из-за того, что каждый сеанс SQL*Plus подразумевает установку соединения с базой данных (если только не применяется параметр /NOLOG), все, что требуется для запуска SQL*Plus и подключения к базе данных — это действительное имя пользователя и пароль.
Настройка среды
Перед вызовом SQL*Plus потребуется сначала правильно настроить среду Oracle.В частности, необходимо установить значения для таких переменных среды, как ORACLE_SID, ORACLE_HOME и LD_LIBRARY_PATH. Помимо этого иногда нужно установить значения и для таких переменных среды, как NLS_LANG и ORA_NLS11.
В случае не установки правильных значений для необходимых переменных среды будет возникать ошибка. Например, не установка надлежащего значения для переменной ORACLE_HOME перед запуском SQL*Plus будет приводить к появлению следующей ошибки:
В случае получения показной выше ошибки достаточно установить значение для переменной среды ORACLE_HOME:
Программное обеспечение SQL*Plus Instant Client
Для использования SQL*Plus инсталлировать полностью все серверное программное обеспечение Oracle Database вовсе не обязательно. Если нужно взаимодействовать через интерфейс SQL*Plus с базой данных, которая находится на другом сервере,вполне хватит и программного обеспечения SQL*Plus Instant Client. С помощью этого программного обеспечения к любой базе данных Oracle, функционирующей под управлением любой операционной системы, можно подключаться удаленным образом за счет указания ее имени и применения идентификатора сетевого подключения Oracle.Единственным требованием для подключения к удаленной базе данных подобным образом является указание имени удаленной базы данных в файле tnsnames.ora. Именно поэтому для SQL*Plus Instant Client требуется задавать переменную среды ORACLE_HOME.Существует также метод, который не требует применения на клиентском сервере файла tnsnames.ora. Называется он методом простого подключения (easy connect). Ниже приведен пример, показывающий, как с помощью идентификатора простого подключения установить от имени пользователя OE подключение к базе данных testdb, расположенной на сервере myserver:
В этом примере 1521 — это порт, используемый слушателем для получения запросов на установку подключения.
Запуск сеанса SQL*Plus из командной строки
Прежде чем подключаться к сеансу SQL*Plus, необходимо сначала правильно настроить среду и указать, с какой базой данных на сервере должно устанавливаться соединение по умолчанию. Делается это с помощью переменной среды ORACLE_SID.
После указания базы данных, которая должна использоваться по умолчанию (в приведенном примере это orcl) в переменной среды ORACLE_SID, можно получать доступ к SQL*Plus из приглашения командной строки, просто вводя команду sqlplus безо имени пользователя и пароля. SQL*Plus предложит ввести имя пользователя и пароль. В случае предоставления имени пользователя вместе с командой (например: sqlplus salapati),SQL*Plus будет приглашать ввести только пароль. Администратор баз данных должен входить от имени одной из административных учетных записей.
На заметку! На серверах UNIX ввод должен обязательно выполняться в нижнем регистре. В Windows интерфейс не чувствителен к регистру символов. За исключением этой небольшой детали, во всем остальном командный интерфейс SQL*Plus работает одинаково и на платформе Windows, и на всех вариантах платформ UNIX и Linux.
Разумеется, вводить имя пользователя и пароль можно и непосредственно при вызове SQL*Plus, но тогда пароль будет виден другим при его вводе. Ниже приведен пример:
Приглашение SQL (SQL>) означает, что соединение с SQL*Plus инициировано, и можно начинать вводить команды и операторы SQL, PL/SQL и SQL*Plus.
Для того чтобы подключиться к другой базе данных, а не той, что установлена по умолчанию, нужно использовать следующую команду:
Определенные операции, например запуск и завершение работы, разрешено выполнять только в случае подключения к SQL*Plus с привилегиями SYSDBA или SYSOPER. При наличии привилегий SYSDBA (или SYSOPER) подключаться к SQL*Plus можно следующим образом:
Конструкция AS позволяет устанавливать привилегированные подключения пользователям, которым были выданы системные привилегии SYSDBA или SYSOPER.
Если в базе данных была создана учетная запись аутентифицированного пользователя операционной системы (ранее называвшаяся OPS$имя; см. главу 12), устанавливать подключение можно и просто указанием символа косой черты (/), как показано ниже:
Можно также подключаться через метод аутентификации операционной системы, за счет включения владельца программного обеспечения Oracle в группу администраторов баз данных (DBA):
Обратите внимание, что во всех предыдущих примерах имя базы данных при подключении через SLQ*Plus не указывалось. Объясняется это тем, что подключение устанавливалось к принятому по умолчанию экземпляру, т.е. к базе данных, на которую указывает значение переменной среды ORACLE_SID. Указывать имя базы данных при использовании SQL*Plus для подключения к принятой по умолчанию базе данных не обязательно. Для подключения к другой базе данных, доступной по сети, нужно обязательно использовать идентификатор подключения (имя сетевой службы).
На заметку! Имя экземпляра, имя базы данных и имя службы могут как совпадать, так и отличаться.
С теоретической точки зрения, подключаться к базе данных можно с использованием полного синтаксиса идентификатора подключения, как показано в следующем примере, где для подключения к базе данных orcl применяется весь адрес целиком:
Однако за счет использования имени сетевой службы, определенного в сетевом файле tnsnames.ora, можно подключаться к базе данных более простым образом:
Кроме того, для подключения к базе данных можно применять простой метод подключения. Синтаксис простого метода подключения выглядит так:
Например, вот как подключиться с помощью этого метода к базе данных orcl:
Обратите внимание, что в случае применения простого метода подключения сетевой файл (tnsnames.ora) не нужен.
Какой бы из перечисленных методов не использовался, в конечном итоге будет обязательно успешно устанавливаться сеанс SQL*Plus либо с базой данных по умолчанию,либо с той, что была указана в идентификаторе подключения.
Установка подключения с помощью команды CONNECT
В SQL*Plus поддерживается команда CONNECT, которая позволяет после входа в SQL*Plus выполнять подключение от имени другого пользователя. Кроме того, она позволяет после подключения к одной базе данных подключаться к другой базе данных.Ниже приведен пример использования команды CONNECT для выполнения подключения от имени другого пользователя:
Следующий пример демонстрирует, как в SQL*Plus подключаться к другой базе данных за счет предоставления идентификатора подключения в виде части команды CONNECT:
Перед подключением к другой базе данных необходимо проверять, что в файле tnsnames.ora присутствует необходимая информация о подключении к удаленной базе данных.
Команду CONNECT можно использовать в SQL*Plus вместе с синтаксисом / AS SYSDBA и / AS SYSOPER, как показано ниже:
Запуск сеанса SQL*Plus без установки подключения к базе данных с помощью параметра /NOLOG
Сеанс SQL*Plus можно также запускать и без установки подключения к базе данных,счет указав вместе с командой sqlplus параметр /NOLOG. В подобном может возникать необходимость, например, при запуске базе данных или просто для использования доступных в SQL*Plus команд для записи или редактирования сценариев. После запуска сеанса SQL*Plus для подключения к базе данных всегда можно применить команду CONNECT.
Ниже приведен пример использования параметра /NOLOG:
Подключение к SQL*Plus через графический интерфейс Windows
Работать с утилитой SQL*Plus можно как в ручном, так и в сценарном не интерактивном режиме. Само собой разумеется, что уязвимые административные задачи, вроде восстановления базы данных, лучше выполнять в интерактивном режиме. Что же касается рутинных операций по обработке SQL, то их выполнение лучше автоматизировать с помощью сценариев. И в том и в другой случае сами команды будут выглядеть одинаково — отличаться будет лишь режим, в котором они будут выполняться.
Ниже показан синтаксис команды подключения к SQL*Plus:
Подключаться от имени пользователя с привилегиями SYSOPER, SYSDBA или SYSASM необходимо для выполнения привилегированных операций, вроде завершения работы и запуска базы данных или резервного копирования либо восстановления базы данных.Привилегия SYSAM является новой в Oracle Database 11g и предназначена для разделения обычных операций по администрированию баз данных и операций автоматического управления памятью (Automatic Storage Management — ASM).
Работа в SQL*Plus
После подключения к интерфейсу SQL*Plus можно начинать вводить в нем любые команды SQL*Plus, SQL или PL/SQL. Как будет объясняться позже в этой главе, операторы SQL оканчиваются либо символом точки с запятой (;), либо символом косой черты (/), а блоки кода PL/SQL — только символом косой черты (/). Вывод можно как просматривать на экране, так и при желании записывать в файл. Команды SQL*Plus всегда оканчиваются символов новой строки. При вводе команды SQL*Plus клиентская программа SQL*Plus анализирует ее, и если та представляет собой оператор SQL или PL/SQL, отправляет ее серверу баз данных для обработки.
В этом примере из-за перехода на вторую строку после дефиса (-), который еще так же является и знаком минус, утилита SQL*Plus автоматически интерпретировала его как символ продолжения и выдала ошибку, потому что оператор получился синтаксически некорректным (select 200 100 from dual). Избежать этой проблемы можно за счет использования в конце первой строки второго дефиса (знака минус) для выполнения роли символа продолжения:
В Oracle для выполнения определенных запросов необходимо использовать таблицу DUAL, поскольку в поддерживаемом Oracle синтаксисе SQL наличие конструкции FROM в операторе SELECT является обязательным (например, SELECT sysdate FROM dual;).В базах данных Microsoft SQL Server, с другой стороны, использовать таблицу DUAL не требуется, потому что в синтаксисе SQL Server допускается применение операторов SELECT без конструкции FROM.
Завершение сеанса SQL*Plus
Завершается сеанс SQL*Plus вводом команды EXIT, причем как в нижнем, так и в верхнем регистре. С помощью команды QUIT осуществляется выход в операционную систему (регистр символов тоже роли не играет).
Внимание! В случае выполнения аккуратного выхода из SQL*Plus по команде EXIT (или QUIT) будет немедленно происходить фиксация всех транзакций. Если не нужно, чтобы происходила фиксация транзакций, перед выходом потребуется выполнить команду rollback.