Как запустить select в oracle sql

Обновлено: 07.07.2024

Оператор языка SQL SELECT - основная строительная конструкция для создания любого, простого или сложного запроса к базе данных. Без него, как и без фундамента для постройки, невозможно получить ни одну выборку данных из базы. На этом уроке мы узнаем, как построить запрос для получения

  • простой выборки данных без условий (выбор всех строк во всех столбцах или всех строк в определённых столбцах);
  • выборки данных с одним или несколькими условиями (выбор определённых строк), которые заданы в секции WHERE с помощью предикатов и дополительный операторов;
  • как использовать оператор SELECT в подзапросах .

SELECT для выбора столбцов таблицы

Запрос с оператором SELECT для выбора всех столбцов таблицы имеет следующий синтаксис:

То есть для выбора всех столбцов таблицы после слова SELECT нужно ставить звёздочку.

Если вы хотите выполнить запросы к базе данных из этого урока на MS SQL Server, но эта СУБД не установлена на вашем компьютере, то ее можно установить, пользуясь инструкцией по этой ссылке .

Работать будем с базой данных фирмы - Company1. Скрипт для создания этой базы данных, её таблиц и заполения таблиц данными - в файле по этой ссылке .

Пример 1. Итак, есть база данных фирмы - Company1. В ней есть таблица Org (Структура фирмы) и Staff (Сотрудники). Требуется выбрать из таблиц все столбцы. Соответствующий запрос для выбора всех столбцов из таблицы Org выглядит следующим образом (на MS SQL Server - с предваряющей конструкцией USE company1;):

Этот запрос вернёт следующее (для увеличения картинки щёлкнуть по ней левой кнопкой мыши):


Запрос для выбора всех столбцов из таблицы Staff выглядит следующим образом (на MS SQL Server - с предваряющей конструкцией USE company1;):

Этот запрос вернёт следующее:


Для выбора определённых столбцов таблицы нам потребуется вместо звёздочки перечислить через запятую названия всех столбцов, которые требуется выбрать:

Пример 2. Пусть требуется из таблицы Org выбрать столбцы Depnumb и Deptname, в которых содержатся данные соответственно о номерах отделов фирмы и об их названиях. Запрос для получения такой выборки будет следующим (на MS SQL Server - с предваряющей конструкцией USE company1;):

А из таблицы Staff нужно выбрать столбцы Dept, Name, Job, в которых содержатся соответственно данные о номере отдела, в котором трудится сотрудник, его имени и должности (на MS SQL Server - с предваряющей конструкцией USE company1;):

SELECT и WHERE для выбора строк таблицы

Для выбора определённых строк таблицы вместе с оператором SELECT уже потребуется ключевое слово WHERE, указывающее на некоторое значение или несколько значений, содержащиеся в интересующих нас строках. Наиболее простые условия задаются при помощи операторов сравнения и равенства ( , =), а также ключевого слова IS. Условий может быть несколько, тогда они перечисляются с использованием ключевого слова AND. Запросы для выбора строк имеют следующий синтаксис:

Этот запрос вернёт следующие данные:


SELECT Dept, Name, Job FROM Staff WHERE Job='Clerk' AND DEPT=38

Этот запрос вернёт следующие данные:


Пример 5. Пусть нужно выбрать из таблицы Staff идентификаторы и имена тех сотрудников, размер комиссии которых - неопределённый. Для этого в секции WHERE перед указанием значения столбца Comm - NULL нужно ставить не знак равенства, а слово IS (на MS SQL Server - с предваряющей конструкцией USE company1;):

Этот запрос вернёт следующие данные:


Для указания значений в строках, которые требуется выбрать, используются и знаки сравнения.

Пример 6. Выберем из таблицы имена, размеры заработные платы и число лет, проработанных в фирме, сотрудников, которые работают в фирме более девяти лет (на MS SQL Server - с предваряющей конструкцией USE company1;):

Запрос вернёт следующие строки:


Использование SELECT и предикатов IN, OR, BETWEEN, LIKE

Предикаты - слова IN, OR, BETWEEN, LIKE в секции WHERE - также позволяют выбрать определённые диапазоны значений (IN, OR, BETWEEN) или значения в строках (LIKE), которые требуется выбрать из таблицы. Запросы с предикатами IN, OR, BETWEEN имеют следующий синтаксис:

SELECT ИМЯ_СТОЛБЦА FROM ИМЯ_ТАБЛИЦЫ WHERE ЗНАЧЕНИЕ ПРЕДИКАТ (IN, OR, BETWEEN) (ЗНАЧЕНИЯ, УКАЗЫВАЮЩИЕ ДИАПАЗОН)

Запросы с предикатом LIKE имеют следующий синтаксис:

SELECT ИМЯ_СТОЛБЦА FROM ИМЯ_ТАБЛИЦЫ WHERE ИМЯ_СТОЛБЦА LIKE ВЫРАЖЕНИЕ

Пример 7. Пусть требуется выбрать из таблицы Staff имена, должности и число отработанных лет сотрудников, работающих в отделах с номерами 20 или 84. Это можно сделать следующим запросом (на MS SQL Server - с предваряющей конструкцией USE company1;):

SELECT Name, Job, Years FROM Staff WHERE Dept IN (20, 84)

Результат выполнения запроса:


На сайте есть подробный урок об использовании предиката IN.

Пример 8. Пусть теперь требуется выбрать из таблицы Staff те же данные, что и в предыдущем примере. Запрос со словом OR аналогичен запросу со словом IN и перечислением интересующих значений в скобках. Запрос будет следующим (на MS SQL Server - с предваряющей конструкцией USE company1;):

SELECT Name, Job, Years FROM Staff WHERE Dept=20 OR Dept=84

Пример 9. Выберем из той же таблицы имена, должности и число отработанных лет сотрудников, зарплата которых между 15000 и 17000 включительно (на MS SQL Server - с предваряющей конструкцией USE company1;):

SELECT Name, Job, Years FROM Staff WHERE Salary BETWEEN 15000 AND 17000

Результат выполнения запроса:


На сайте есть подробный урок об использовании предиката BETWEEN.

Предикат LIKE используется для выборки тех строк, в значениях которых встречаются символы, указанные после предиката между апострофами (').

Пример 10. Выберем из той же таблицы имена, должности и число отработанных лет сотрудников, имена которых начинаются с буквы S и состоят из 7 символов (на MS SQL Server - с предваряющей конструкцией USE company1;):

SELECT Name, Job, Years FROM Staff WHERE Name LIKE 'S_ _ _ _ _ _'

Символ подчёркивания (_) означает любой символ. Результат выполнения запроса:


Пример 11. Выберем из той же таблицы имена, должности и число отработанных лет сотрудников, имена которых начинаются с буквы S и содержат любые другие буквы в любом количестве (на MS SQL Server - с предваряющей конструкцией USE company1;):

SELECT Name, Job, Years FROM Staff WHERE Name LIKE 'S%'

Символ процентов (%) означает любое количество символов. Результат выполнения запроса:


На сайте есть подробный урок об использовании предиката LIKE.

Значения, указанные с использованием предикатов IN, OR, BETWEEN, LIKE можно инвертировать при помощи слова NOT. Тогда запрашиваемые данные будут иметь противоположный смысл. Если мы используем NOT IN (20, 84), то будут выведены данные сотрудников, которые работают во всех отделах, кроме имеющих номера 20 и 84. С использованием NOT BETWEEN 15000 AND 17000 можно получить данные сотрудников, зарплата которых не входит в интервал от 15000 до 17000. Запрос с NOT LIKE выведет данные сотрудников, чьи имена не начинаются или не содержат символов, указанных с NOT LIKE.

Написать SQL запросы с SELECT и предикатами IN, NOT IN, BETWEEN самостоятельно, а затем посмотреть решения

Есть база данных "Театр". Таблица Play содержит данные о постановках. Таблица Team - о ролях актёров. Таблица Actor - об актёрах. Таблица Director - о режиссёрах. Поля таблиц, первичные и внешние ключи можно увидеть на рисунке ниже (для увеличения нажать левой кнопкой мыши).


Пример 12. Вывести список актёров, которые не разу не были утверждены на главную роль. В таблице team данные о главных ролях содержатся в столбце mainteam. Если роль - главная, то в соответствующей строке отмечено 'Y'.

Пример 13. Вывести список актеров, которые играли во всех спектаклях WilliamShakespeare. Данные об авторах содержается в таблице play в столбце author.

Пример 14. Вывести спектакли, в которых средний возраст актеров от 20 до 30 (использовать BETWEEN, Group by, Having, AVG, перекрестное соединение таблиц (CROSS JOIN), удобнее без слова JOIN, а с перечислением таблиц через запятую).

SELECT и ORDER BY - сортировка (упорядочение) строк

Разобранные до сих пор запросы SQL SELECT возвращали строки, которые могли быть расположены в любой последовательности. Однако часто требуется отсортировать строки по порядку номеров, алфавиту и другим признакам. Для этого служит ключевое словосочетание ORDER BY. Такие запросы имеют следующий синтаксис:

SELECT ИМЯ_СТОЛБЦА FROM ИМЯ_ТАБЛИЦЫ WHERE УСЛОВИЕ ORDER BY СТОЛБЕЦ, ПО КОТОРОМУ СОРТИРУЮТСЯ РЕЗУЛЬТАТЫ

Пример 15. Вновь база данных Company1. Пусть требуетя выбрать из таблицы Staff сотрудников, работающих в отделе с номером 84 и отсортировать (упорядочить) записи по числу отработанных лет в возрастающем порядке (на MS SQL Server - с предваряющей конструкцией USE company1;):

SELECT Name, Job, Years FROM Staff WHERE Dept=84 ORDER BY Years ASC

Слово ASC указывает, что порядок сортировки - возрастающий. Это слово не обязательно, так как возрастающий порядок сортировки применяется по умолчанию. Результат выполнения запроса:


Пример 16. Пусть требуетя выбрать те же данные, что и в предыдущем примере, но отсортировать (упорядочить) записи по числу отработанных лет в убывающем порядке (на MS SQL Server - с предваряющей конструкцией USE company1;):

SELECT Name, Job, Years FROM Staff WHERE Dept=84 ORDER BY Years DESC

Слово DESC указывает, что порядок сортировки - убывающий. Результат выполнения запроса:


SELECT и DISTINCT - удаление дубликатов строк

Когда для значений строк таблицы не задано условие уникальности, в результатах запроса могут встретиться одинаковые строки. Часто требуется вывести лишь уникальные строки. Это делается при помощи выражения DISTINCT после оператора SELECT.

Пример 17. Пусть требуетcя узнать, какие существуют отделы и какие должности среди отделов, номера которых меньше 30. Это можно сделать при помощи следующего запроса (на MS SQL Server - с предваряющей конструкцией USE company1;):

SELECT DISTINCT Dept, Job FROM Staff WHERE Dept ORDER BY Dept, Job

Результат выполнения запроса:


Оператор SELECT в подзапросах SQL

До сих пор мы разбирали конструкции SQL с оператором SELECT, в которых условия, по котором выбираются данные, и сами выбираемые данные содержатся в одной и той же таблице базы данных. На практике часто бывает, что данные, которые надо выбрать, содержатся в одной таблице, а условия - в другой. Здесь на помощь приходят подзапросы: значения условия отбора возвращаются из другого запроса (вложенного запроса), начинающегося также с SELECT. Запросы с подзапросами могут выдавать как одну, так и несколько строк.

Пример 18. Все те же таблицы Org и Staff. Пусть требуетcя узнать, в каком подразделении работает сотрудник с идентификационным номером 16, и где это подразделение расположено. Но информация о подразделениях хранится в таблице Org, а информация о сотрудниках - в таблице Staff. Это можно сделать при помощи следующего запроса с подзапросом, в котором внешний SELECT обращается к таблице Org, а внутренний SELECT - к таблице Staff:

SELECT Division, Location FROM Org WHERE Deptnumb = ( SELECT Dept FROM Staff WHERE >

Пример 19. Пусть теперь требуетcя узнать, в каких подразделениях (без дублирования) работают сотрудники с заработной платой менее 13000. Для этого в секции WHERE внешнего SELECT (запрос к таблице Org) задаётся условие, принимающее диапазон значений (IN), а внутренний SELECT (к таблице Staff) как раз возвращает требуемый диапазон значений:


Сердцем языка SQL являются запросы. Инструкция SELECT , которая исполь­зуется для создания SQL-запросов, является наиболее мощной и сложной из всех инструкций SQL. Несмотря на богатство возможностей этой инст­рукции, ее изучение можно начать с создания простейших запросов, а затем по­степенно увеличивать их сложность. В этой главе рассказывается о самых простых SQL-запросах — запросах на чтение данных из отдельных строк одной таблицы базы данных. Если вам не приходилось заниматься этим раньше, то изучение ма­териала будет более эффективно, если вы создадите учебную базу данных в своей системе и будете пытаться выполнить все рассматриваемые здесь запросы. Руково­дство по созданию учебной базы данных можно найти по ссылке "Учебная база данных".

Инструкция SELECT

Инструкция SELECT извлекает информацию из базы данных и возвращает ее в виде результатов запроса. Точный вид результатов зависит от конкретной ис­пользуемой СУБД. В кратком введении в SQL в статье "Краткий обзор SQL", уже приводились примеры инструкций SELECT . Вот еще несколько образцов запросов, извлекающих данные об офисах.

Вывести список офисов с их плановыми и фактическими объемами продаж.

Вывести список офисов, расположенных в восточном регионе, с их плановыми и фак­тическими объемами продаж.

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

На рис. 1 приведена синтаксическая диаграмма инструкции SELECT . Инст­рукция состоит из шести предложений. Предложения SELECT и FROM являются обязательными; четыре остальные включаются в инструкцию только при необхо­димости. Ниже перечислены функции каждого из предложений.

  • В предложении SELECT перечисляются элементы данных, которые долж­ны быть выбраны инструкцией SELECT . Это могут быть либо столбцы ба­зы данных, либо столбцы, вычисляемые при выполнении запроса. Пред­ложение SELECT описано далее в настоящей главе.
  • В предложении FROM указывается список таблиц и представлений, кото­рые содержат элементы данных, извлекаемые запросом (представления) - Запросы, извлекающие данные из одной таблицы, описаны в настоящей статье. Более сложные запросы, извлекающие данные из двух или более таблиц, будут рассматриваться в другой статье, посвященной многотабличным запросам.
  • Предложение WHERE указывает, что в результаты запроса следует вклю­чать только некоторые строки. Для отбора строк, включаемых в резуль­таты запроса, используется условие отбора. Основные возможности этого предложения описаны ниже в настоящей статье. Использование в пред­ложении WHERE вложенных подзапросов рассматривается в статье, посвященной подзапросам и выражениям с запросами.

Синтаксическая диаграмма инструкции select

Рис. 1. Синтаксическая диаграмма инструкции select

  • Предложение GROUP BY позволяет создать итоговый запрос. Вместо ге­нерации одной строки результата для каждой строки данных в базе дан­ных, итоговый запрос вначале группирует строки базы данных по опре­деленному признаку, а затем включает в результаты запроса одну итого­вую строку для каждой группы.
  • Предложение having указывает, что в результаты запроса следует вклю­чать только некоторые из групп, созданных с помощью предложения GROUP BY . В этом предложении, как и в предложении WHERE , для отбора включаемых групп используется условие отбора.
  • Предложение order by сортирует результаты запроса на основании данных, содержащихся в одном или нескольких столбцах. Если это пред­ложение отсутствует, результаты запроса не будут отсортированы. Пред­ложение ORDER BY рассматривается далее в настоящей статье.

Предложение SELECT

В предложении SELECT , с которого начинаются все инструкции SELECT , необ­ходимо указать элементы данных, которые будут возвращены запросом. Эти эле­менты задаются в виде списка выбора, состоящего из выбираемых элементов, разде­ленных запятыми. Для каждого элемента из этого списка в таблице результатов запроса будет создан один столбец; при этом столбцы в таблице результатов будут расположены в том же порядке слева направо, что и элементы списка возвращае­мых столбцов. Возвращаемый элемент может представлять собой следующее.

  • Имя столбца, идентифицирующее один из столбцов, содержащихся в таблицах, которые перечислены в предложении from . СУБД просто бе­рет значение этого столбца для каждой из строк таблицы и помещает его в соответствующую строку таблицы результатов запроса.
  • Константу, показывающую, что в каждой строке результатов запроса должно содержаться одно и то же значение.
  • Выражение, указывающее, что SQL должен вычислить значение, поме­щаемое в результаты запроса, по формуле, определенной в выражении.

Все типы возвращаемых столбцов описаны далее в настоящей статье.

Предложение FROM

Предложение FROM состоит из ключевого слова from, за которым следует спи­сок спецификаций таблиц, разделенных запятыми. Каждая спецификация табли­цы идентифицирует таблицу или представление, содержащие данные, которые извлекает запрос. Эти таблицы называются исходными таблицами запроса (и ин­струкции SELECT ), поскольку они являются источниками всех данных, содержа­щихся в таблице результатов запроса. Во всех запросах, рассматриваемых в на­стоящей главе, в предложении from указана одна таблица.

Результаты запроса

Результатом SQL-запроса на выборку всегда является таблица, содержащая данные и ничем не отличающаяся от таблиц базы данных. Если пользователь на­бирает инструкцию SQL в интерактивном режиме, СУБД выводит результаты за­проса (которые некоторые производители именуют результирующим набором (result set)) на экран в табличной форме. Если программа посылает запрос СУБД с помощью программного SQL, то СУБД возвращает таблицу результатов запроса программе. В любом случае результаты запроса всегда имеют такой же формат, как и обычные таблицы, содержащиеся в базе данных, как показано на рис. 2. Обычно результаты запроса представляют собой таблицу с несколькими строками и столбцами. Например, запрос, приведенный ниже, возвращает таблицу из трех столбцов (поскольку запрашиваются три элемента данных) и десяти строк (по ко­личеству служащих).

Вывести список имен, офисов и дат приема на работу всех служащих.

Табличная структура результатов SQL-запроса

Рис. 2. Табличная структура результатов SQL-запроса

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

Имя, плановый и фактический объемы продаж служащего с идентификатором 107.

В некоторых случаях результатом запроса может быть единственное значение, как в следующем примере.

Среднее значение фактических объемов продаж по всем служащим компании.

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

И наконец, запрос может вернуть результаты, содержащие нуль строк, как в следующем примере.

Список имен и дат приема на работу всех служащих, фактический объем продаж которых превышает $500 000.

Даже в таком случае результаты запроса считаются таблицей. Пустая таблица, приведенная выше, содержит два столбца и нуль строк.

Обратите внимание на то, что поддержка отсутствующих данных в SQL рас­пространяется и на результаты запроса. Если один из элементов данных в таблице имеет значение NULL , то оно попадет в результаты запроса при извлечении этого элемента. Например, в таблице SALESREPS значение NULL содержится в столбцах QUOTA и MANAGER . Приведенный далее запрос возвращает эти значения во втором и третьем столбцах таблицы результатов запроса. Заметим, что не все SQL- продукты выводят значения NULL таким образом — Oracle и DB2, например, встретив значение NULL , не выводят ничего.

Список служащих с их плановыми объемами продаж и менеджерами.

To, что SQL-запрос всегда возвращает таблицу данных, очень важно. Это озна­чает, что результаты запроса можно сохранить в базе данных в виде таблицы. Это означает также, что результаты двух подобных запросов можно объединить в одну таблицу. И наконец, это говорит о том, что результаты запроса сами могут стать предметом дальнейших запросов. Таким образом, табличная структура реляцион­ной базы данных тесно связана с реляционными запросами SQL. Таблицам можно посылать запросы, а запросы возвращают таблицы.

Простые SQL запросы

Наиболее простые запросы извлекают данные из столбцов, расположенных в одной таблице базы данных. Например, следующий запрос извлекает из таблицы OFFICES три столбца.

Вывести для каждого из офисов список городов, регионов и объемов продаж.

Инструкция SELECT для простых запросов, таких как показанный выше, состо­ит только из двух обязательных предложений. В предложении SELECT перечисля­ются имена требуемых столбцов; в предложении FROM указываются имена таблиц и представлений, содержащих эти столбцы.

Концептуально SQL обрабатывает запрос путем построчного просмотра табли­цы, указанной в предложении FROM . Для каждой строки таблицы берутся значе­ния из указанных в запросе столбцов и создается одна строка результатов запроса. Таким образом, таблица результатов простого запроса на выборку содержит одну строку данных для каждой строки исходной таблицы базы данных.

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

Команда SELECT производит выборку данных из таблиц по запросу.

Язык SQL допускает три типа синтаксических конструкций, начинающихся с ключевого слова SELECT:

  1. оператор выборки (select statement)
  2. спецификация курсора (cursor specification)
  3. подзапрос (subquery).

Синтаксис команды SELECT в MySQL

Синтаксис команды SELECT в Oracle

Основные ключевые слова и параметры команды SELECT в MySQL

Синтаксис команды SELECT в Oracle

Синтаксис команды SELECT в Oracle

Query table expression clause

Table collection expression

Hierarchical query clause

Group by clause

Order by clause

For update clause

Основные ключевые слова и параметры команды SELECT в Oracle

Описание команды SELECT

Основой всех синтаксических конструкций, начинающихся с ключевого слова SELECT, является синтаксическая конструкция “табличное выражение”.

Семантика табличного выражения состоит в том, что на основе последовательного применения разделов FROM, WHERE, GROUP BY и HAVING из заданных в разделе FROM таблиц строится некоторая новая результирующая таблица, порядок следования строк которой не определен и среди строк которой могут находиться дубликаты (т.е. в общем случае таблица-результат табличного выражения является мультимножеством строк).

Наиболее общей является конструкция “спецификация курсора”. Курсор — это понятие языка SQL, позволяющее с помощью набора специальных операторов получить построчный доступ к результату запроса к БД. К табличным выражениям, участвующим в спецификации курсора, не предъявляются какие- либо ограничения. При определении спецификации курсора используются три дополнительных конструкции: спецификация запроса, выражение запросов и раздел ORDER BY.

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

Выражение запросов — это выражение, строящееся по указанным синтаксическим правилам на основе спецификаций запросов. Единственной операцией, которую разрешается использовать в выражениях запросов, является операция UNION (объединение таблиц) с возможной разновидностью UNION ALL.

Оператор выборки — это отдельный оператор языка SQL, позволяющий получить результат запроса в прикладной программе без привлечения курсора. Поэтому оператор выборки имеет синтаксис, отличающийся от синтаксиса спецификации курсора, и при его выполнении возникают ограничения на результат табличного выражения. Фактически, и то, и другое диктуется спецификой оператора выборки как одиночного оператора SQL: при его выполнении результат должен быть помещен в переменные прикладной программы. Поэтому в операторе появляется раздел INTO, содержащий список переменных прикладной программы, и возникает то ограничение, что результирующая таблица должна содержать не более одной строки.

В диалекте SQL СУБД Oracle поддерживается расширенный вариант оператора выборки, результатом которого не обязательно является таблица из одной строки. Такое расширение не поддерживается ни в SQL/89, ни в SQL/92.

Подзапрос — запрос, который может входить в предикат условия выборки оператора SQL.

Кстати, данную статью Вы можете найти в интернете по запросам:

Команда SELECT, Синтаксис команды SELECT, Описание команды SELECT.

SQL*Plus - программа для работы с СУБД Oracle посредством командной строки. Используя SQL*Plus можно выполнять команды SQL и PL/SQL в интерактивном режиме или используя сценарий.

Основное преимущество SLQ*Plus - доступность, т.к. инструмент доступен практически всегда, когда в системе установлен Oracle. При этом это достаточно мощный инструмент, используя который можно решать различные задачи на удаленных машинах.

К написанию этой статьи меня подтолкнула книга "Oracle SQL*Plus: The Definitive Guide, 2nd Edition", написанная Jonathan Gennick. Как обычно, появилось желание систематизировать информацию и представить ее в удобном виде.

При этом сразу считаю нужным оговориться, что я использую SQLplus для написания и выполнения скриптов на удаленных машинах, в этой статье описываю именно используемые для этого команды.

Область возможного использования SQLplus при этом гораздо шире, например - построение отчетов, в том числе в формате HTML.

Параметры, подключение к базе, запуск скриптов

Выполнить несколько строк кода (не передавая отдельный файл со скриптом), unix:

Выполнение SQL запросов

Запрос может состоять из нескольких строк, содержать комментарии, но не может содержать внутри пустые строки.

Запрос может быть выполнен тремя способами:

  • точка с запятой в конце запроса
  • строка с слешем "/" после запроса
  • пустая строка после запроса (будет помещен в буфер, но не выполнен немедленно)

Выполнение PL/SQL блоков

Пример PL/SQL блока:

Правила выполнения PL/SQL блоков:

  • Первое слово в PL/SQL блоке должно быть из списка: BEGIN, DECLARE, CREATE PROCEDURE,
    CREATE FUNCTION, CREATE TRIGGER, CREATE PACKAGE, CREATE TYPE, CREATE TYPE BODY. Регистр не важен.
  • Блок может состоять из нескольких строк
  • Можно вставлять /* комментарии */, они также могут быть на несколько строк
  • Пустые строки не разрешены внутри блока

Сигнал к выполнению блока может быть подан двумя путями:

  • Строка, содержащая только слеш "/" после блока - выполнить сразу
  • Строка, содержащая точку "." после блока - поместить в буфер. Содержимое буфера может быть выведено командой LIST и выполнено, путем указания одиночного слеша "/" или команды RUN.

Одиночное выражение PL/SQL может быть выполнено, используя:

В случае ошибок, при выполнении процедуры, можно отобразить их выполнив команду:

Работа с переменными

Переменные могут быть заданы двумя способами:

Если уже была определена &&variable, то значение будет подставлено во все дальнейшие переменные как &variable так и &&variable.

Если была определена &&variable, и скрипт запущен повтороно в ходе той же сессии работы с SQLplus - будет использовано старое значение переменной. Чтобы этого избежать - можно запрашивать интерактивный ввод в скрипте принудительно, испольтзуя команду:

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.

Запомнить настройки перед выполнением скрипта и вернуть обратно по завершении выполнения:

Читайте также: