
- •Задание №1 Простые sql-запросы
- •Теоретическая часть
- •Практическая часть
- •Задание № 2 Создание баз данных посредством sql
- •Теоретическая часть
- •Практическая часть
- •Задание № 3 Процедуры и функции pl/sql
- •Теоретическая часть
- •Практическая часть
- •Задание № 4 Триггеры баз данных
- •Теоретическая часть
- •Практическая часть
- •Задание № 5 Динамический sql
- •Теоретическая часть
- •Практическая часть
Задание №1 Простые sql-запросы
Цель работы – изучить назначение простых запросов SQL, возможностей задания, а также ограничений задания запросов для безошибочной их обработки СУБД.
Теоретическая часть
Особенностью большинства современных СУБД является то, что они позволяют как определять базу данных с помощью языка определения данных (в дальнейшем DDL – data definition language), так и добавлять, изменять и извлекать информацию из базы данных посредством языка управления данными (в дальнейшем DML – data manipulation language). Наиболее распространенным и стандартизированным языком управления и определения является язык структурированных запросов (в дальнейшем SQL – structured query language). Язык SQL в настоящее время поддерживается большинством СУБД с различными и незначительными отклонениями от стандарта, регламентирующего общие правила задания запросов. В этом случае можно говорить о “диалектах” SQL поддерживаемых конкретными СУБД. Заметим, что существенных отличий данных диалектов от стандарта SQL не имеется, так же отсутствуют существенные различия между этими диалектами.
Однако стоит отметить, что SQL является языком четвертого поколения. Это означает, что он описывает то, что нужно выполнить, а не то, как это должно быть сделано. Языки четвертого поколения, подобные SQL, как правило, проще (по сравнению с языками третьего поколения) и содержат меньшее число команд. Кроме того, они изолируют пользователя от базовых структур данных и алгоритмов, реализуемых исполняющей системой. Однако в некоторых случаях процедурные конструкции языков 3GL полезны для более точного описания программы. Именно для этого применяется PL/SQL, который объединяет мощь и гибкость SQL (языка 4GL) и процедурные конструкции языка 3GL.
PL/SQL означает Procedural Language/SQL (процедурный язык/SQL). Как видно из названия, PL/SQL расширяет возможности SQL, добавляя в него такие конструкции процедурных языков, как:
• Переменные и типы данных (как предварительно определенные, так и определяемые пользователями)
• Управляющие структуры, такие как условные операторы и циклы
• Процедуры и функции
• Объектные типы и методы
Процедурные конструкции объединяются с Oracle SQL, что дает в результате структурированный и эффективный язык программирования.
Допустимыми операторами DML являются SELECT (выбрать), INSERT (вставить), UPDATE (обновить) и DELETE (удалить). Каждый оператор действует в соответствии со своим названием: с помощью SELECT в таблице выбираются строки, указанные в условии WHERE; посредством INSERT к таблице базы данных добавляются строки; с помощью UPDATE модифицируются строки, указанные в условии WHERE; с помощью DELETE эти строки удаляются. Помимо условия WHERE, в этих операторах могут применяться и другие конструкции (см. ниже).
Когда SQL-операторы выполняются из SQL*Plus, результаты выводятся на экран. Для операторов UPDATE, INSERT и DELETE SQL*Plus возвращает число обработанных строк, а для оператора SELECT — строки, указанные в запросе.
Рассмотрим оператор UPDATE:
UPDATE CLASSES
SET num_credits = 3
WHERE department = 'HIS'
AND course = 101;
Все значения, используемые для изменения содержимого таблицы classes, жестко программируются, т.е. они известны во время написания этого оператора. В PL/SQL ограничения на применение переменных отсутствуют.
Переменные могут указываться в любом месте SQL-оператора, где разрешены выражения. Переменные, используемые таким образом, называются переменными присваивания или переменными привязки (bind variable).
С помощью оператора SELECT данные выбираются в базе данных и записываются в переменные PL/SQL. Общий вид оператора SELECT приведен ниже.
Предложение SELECT:
Элемент_списка_выбора Выбранный столбец (или выражение). Каждый элемент списка выбора отделяется запятой и при желании может быть идентифицирован с помощью псевдонима. Полный набор элементов списка выбора называется списком выбора (select list). Символ * является кратким условным обозначением всей строки. При его использовании выбираются все поля строки таблицы в том порядке, в котором они определены.
Переменная Переменная PL/SQL, в которую заносится выбранный столбец. Каждая переменная должна быть совместима по типу с соответствующим элементом списка выбора. Число элементов списка выбора и выходных переменных должно совпадать.
Запись_PL/SQL Может использоваться вместо списка переменных. Запись должна содержать поля, которые соответствуют списку выбора. Запись обеспечивает более простое управление возвращаемыми данными. При помощи записей связанные поля группируются в одну синтаксическую единицу, поэтому к полям записи можно обращаться как к единому целому либо по отдельности. Если в качестве списка выбора указан символ *, то запись может быть определена как ссылка_на_таблицу%ROWTYPE.
Ссылка_на_таблицу Определяет таблицу, из которой выбираются данные. Один запрос может выбирать данные из более чем одной таблицы, в этом случае ссылки на таблицу разделяются запятыми. Запрос такого типа называется соединением. Ссылка_на_таблицу не обязательно должна быть именем таблицы базы данных. Это может быть синоним либо таблица, принадлежащая удаленной базе данных, на которую указывает связь баз данных, представление, столбец вложенной таблицы или inline-представление.
Условие WHERE Критерий запроса, С помощью этого условия задается строка, которая будет возвращена запросом. Условие WHERE состоит из логических условий, соединенных знаками логических операций.
При помощи оператора SELECT, описанного выше, можно выбрать не более одной строки. Заданный критерий выбора будет сопоставляться с каждой строкой таблицы, и если условию будет удовлетворять несколько строк, PL/SQL вернет сообщение об ошибке.В этом случае следует воспользоваться курсором и выбрать каждую строку по отдельности.
Синтаксис оператора INSERT приведен ниже. В операторе отсутствует условие WHERE.
Здесь ссылка_на_таблицу указывает на таблицу Oracle, имя_столбца — на столбец этой таблицы, а выражение является выражением SQL или PL/SQL. Если в операторе INSERT имеется оператор_выбора, то список выбора должен соответствовать столбцам, в которые вносится информация. Запрос такого типа называется подзапросом, так как он находится внутри другого оператора SQL.
Оператор UPDATE имеет следующий синтаксис:
Здесь ссылка_на_таблицу указывает на обновляемую таблицу (или представление), имя_столбца — на столбец, значение которого будет изменено, а выражение — это выражение SQL. Если в операторе содержится оператор_выбора, то список выбора должен соответствовать столбцам команды SET (установить). Специальный синтаксис 'CURRENT OF курсор' используется вместе с определением курсора.
При помощи оператора DELETE удаляются строки из таблицы базы данных. Условие WHERE оператора указывает на те строки, которые должны быть удалены. Синтаксис оператора DELETE приведен на рисунке ниже.
Здесь ссылка_на_таблицу указывает на таблицу Oracle (или некоторое представление), a условие_where определяет группу строк, которые будут удалены. Специальный синтаксис 'CURRENT OF курсор' используется вместе с определением курсора.
В состав операторов SELECT, UPDATE и DELETE в качестве важной части входит условие WHERE. Оно определяет активный набор (active set) -
множество строк, которое возвращается запросом SELECT или на которое воздействует оператор UPDATE или DELETE. Предложение WHERE строится из условий, соединенных логическими операциями AND (и), OR (или) и NOT (не). Эти условия обычно имеют форму сравнений.