Чтение онлайн

на главную - закладки

Жанры

Шрифт:

Без перечисления столбцов результирующих выборок SQL-запросов пишется очень компактный код вида

l_person person%ROWTYPE;

SELECT * INTO l_person FROM person WHERE id=13243297;

print(l_person);

SQL-запрос выбирает все столбцы таблицы person, и у объявленной с помощью %ROWTYPE переменной l_person будет ровно столько же атрибутов, сколько столбцов у таблицы person, с такими же

именами и типами данных, в том же порядке следования. Значения всех столбцов считываемой строки таблицы присвоятся соответствующим атрибутам записи PL/SQL. Если в таблице person в будущем появится новый столбец, он автоматически «подхватится» и SQL-запросом (SELECT *) и объявлением переменной l_person в программе PL/SQL. Никаких изменений в код вносить не потребуется, автоматическая перекомпиляция программы произойдет при первом обращении к ней.

Объявлять переменные как записи PL/SQL с помощью атрибута %ROWTYPE можно не только на основе какой-то одной таблицы, но и на основе столбцов результирующих выборок произвольных SQL-запросов. Для этого записи PL/SQL объявляются на основе явных курсоров, рассматриваемых далее.

Структура программы PL/SQL

Структура блока

В PL/SQL, как и в большинстве процедурных языков программирования, наименьшей единицей группировки исходного кода является блок. Он представляет собой фрагмент кода, определяющий границы выполнения кода и области видимости для объявлений. Блоки могут вкладываться друг в друга.

Разделы блока PL/SQL

Блок PL/SQL состоит из четырех разделов:

раздел заголовка;

раздел объявлений;

исполняемый раздел;

раздел обработки исключений.

Разделов заголовка, объявлений и обработки исключений в блоке может не быть, обязательным является только исполняемый раздел.

Синтаксически блок PL/SQL выглядит следующим образом:

раздел заголовка

DECLARE

раздел объявлений

BEGIN

исполняемый раздел

EXCEPTION

раздел обработки исключений

END;

В разделе заголовка указываются:

тип блока (процедура, функция);

имя блока (имя процедуры, функции);

имена параметров, их

типы данных и режимы передачи значений.

В разделе объявлений объявляются пользовательские типы данных, переменные и константы, которые потом используются в исполняемом разделе и разделе обработки исключений. В исполняемом разделе реализуется собственно логика программы. В вырожденном случае там может присутствовать только одна «пустая» команда NULL. Обработка исключений рассматривается далее в отдельном параграфе.

Ключевые слова BEGIN и END в языке PL/SQL являются операторными скобками, подобными символам { и } в других языках программирования и отмечают начало исполняемого раздела и конец блока. Каждая команда в PL/SQL должна завершаться точкой с запятой (символом ; ).

Виды блоков PL/SQL

В PL/SQL есть два вида блоков:

именованные блоки (с разделом заголовка);

анонимные блоки (без раздела заголовка).

Именованные блоки в свою очередь тоже бывают двух видов:

именованные блоки хранимых в базе данных программ (процедур, функций, пакетов и триггеров);

именованные блоки в разделах объявлений других блоков (анонимных или именованных).

Хранимые программы (stored programs) являются объектами базы данных Oracle и создаются DDL-командой CREATE, после которой записывается именованный блок PL/SQL. Имя блока, указанное в разделе заголовка, будет являться именем объекта базы данных.

Анонимные блоки (anonymous blocks) раздела заголовка не имеют. Если блок не имеет раздела заголовка, то он не имеет и имени, которое в этом разделе указывается, поэтому такие блоки и называются анонимными.

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

Анонимный блок-сценарий file1.sql

Вложенные анонимные блоки

в именованном блоке хранимой программы

DECLARE

i INTEGER;

– именованный блок процедуры proc1

– в разделе анонимного блока

Конец ознакомительного фрагмента.

Поделиться:
Популярные книги

Очешуеть! Я - жена дракона?!

Амеличева Елена
Фантастика:
юмористическая фантастика
5.43
рейтинг книги
Очешуеть! Я - жена дракона?!

Скандальная свадьба

Данич Дина
1. Такие разные свадьбы
Любовные романы:
современные любовные романы
эро литература
5.00
рейтинг книги
Скандальная свадьба

Где властвует любовь

Куин Джулия
4. Бриджертоны
Любовные романы:
исторические любовные романы
8.94
рейтинг книги
Где властвует любовь

Студент 2

Гуров Валерий Александрович
2. Студент
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Студент 2

Вторая невеста Драконьего Лорда. Дилогия

Огненная Любовь
Вторая невеста Драконьего Лорда
Любовные романы:
любовно-фантастические романы
5.60
рейтинг книги
Вторая невеста Драконьего Лорда. Дилогия

Паладин из прошлого тысячелетия

Еслер Андрей
1. Соприкосновение миров
Фантастика:
боевая фантастика
попаданцы
6.25
рейтинг книги
Паладин из прошлого тысячелетия

Кротовский, побойтесь бога

Парсиев Дмитрий
6. РОС: Изнанка Империи
Фантастика:
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Кротовский, побойтесь бога

Эволюционер из трущоб. Том 3

Панарин Антон
3. Эволюционер из трущоб
Фантастика:
попаданцы
аниме
фэнтези
фантастика: прочее
6.00
рейтинг книги
Эволюционер из трущоб. Том 3

Инкарнатор

Прокофьев Роман Юрьевич
1. Стеллар
Фантастика:
боевая фантастика
рпг
7.30
рейтинг книги
Инкарнатор

Морозная гряда. Первый пояс

Игнатов Михаил Павлович
3. Путь
Фантастика:
фэнтези
7.91
рейтинг книги
Морозная гряда. Первый пояс

Ванька-ротный

Шумилин Александр Ильич
Фантастика:
альтернативная история
5.67
рейтинг книги
Ванька-ротный

Искатель 2

Шиленко Сергей
2. Валинор
Фантастика:
фэнтези
попаданцы
рпг
5.00
рейтинг книги
Искатель 2

Титан империи

Артемов Александр Александрович
1. Титан Империи
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Титан империи

Честное пионерское! Часть 3

Федин Андрей Анатольевич
3. Честное пионерское!
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Честное пионерское! Часть 3