Разделы презентаций


Управление данными. Язык SQL

Содержание

Рассматриваемые темыЯзык SQL. Его назначение.Подмножества языка DDL и DML.Операторы DDL: Create, Alter, Drop.Операторы DML: Insert, Update, Delete, Select.Управление правами пользователя Grant, Revoke.Реализация специальной логики приложений – триггеры и хранимые процедуры.Расширения ANSI

Слайды и текст этой презентации

Слайд 1Управление данными
Лекция 6. Язык SQL

Управление даннымиЛекция 6.	Язык SQL

Слайд 2Рассматриваемые темы
Язык SQL. Его назначение.
Подмножества языка DDL и DML.
Операторы DDL:

Create, Alter, Drop.
Операторы DML: Insert, Update, Delete, Select.
Управление правами пользователя

Grant, Revoke.
Реализация специальной логики приложений – триггеры и хранимые процедуры.
Расширения ANSI SQL.
Рассматриваемые темыЯзык SQL. Его назначение.Подмножества языка DDL и DML.Операторы DDL: Create, Alter, Drop.Операторы DML: Insert, Update, Delete,

Слайд 3Язык SQL
Язык структурированных запросов (Structured queries language);
Текстовый язык, семантически приближенный

к английскому языку;
Каждый запрос – отдельная команда для СУБД (оператор)

с фиксированным синтаксисом.
Имеет подмножества операторов DDL (определение данных) и DML (манипулирование данными)
Язык SQLЯзык структурированных запросов (Structured queries language);Текстовый язык, семантически приближенный к английскому языку;Каждый запрос – отдельная команда

Слайд 4
DDL
Операторы создания, изменения и удаления баз данных и объектов схемы

данных
Создание:
CREATE

[параметры]
Типы объектов:
DATABASE – база данных;
SCHEMA – схема данных;
TABLE – таблица (отношение);
CONSTRAINT – ограничение;
ATTRIBUTE – атрибут;
VIEW – представление;
INDEX – индекс;
SEQUENCE – последовательность;
STORED PROCEDURE – хранимая процедура;
TRIGGER – триггер;
USER – пользователь БД.
DDLОператоры создания, изменения и удаления баз данных и объектов схемы данныхСоздание:

Слайд 5
DDL. Создание таблиц
CREATE TABLE (
[,])

: name

[]
: CONSTRAINT [name]

DDL. Создание таблиц	CREATE TABLE (						   [,])	: name []	: CONSTRAINT [name]

Слайд 6DDL. Типы данных атрибутов
Числовые:
Счетчик – counter, serial, auto_increment
Целое – integer

(+ unsigned)
Длинное целое – long (+ unsigned)
C плавающей запятой –

float, double
Логический – bit, boolean, smallint
Строковые
Один символ – char
Строка n символов – char[n], varchar[n]
Дата, время – date, time, datetime, timestamp
Бинарные данные – (long-)(var-)binary
DDL. Типы данных атрибутовЧисловые:Счетчик – counter, serial, auto_incrementЦелое – integer (+ unsigned)Длинное целое – long (+ unsigned)C

Слайд 7DDL. Ограничения
Default – принимать значение по умолчанию;
Not Null –

запрет на отсутствие значений
Unique – запрет повторов
Primary key – первичный

ключ (not null + unique)
Foreign key references () – внешний ключ (ссылка)
Check – требование соблюдать условие
DDL. ОграниченияDefault – принимать значение по умолчанию;Not Null – запрет на отсутствие значенийUnique – запрет повторовPrimary key

Слайд 8
DDL. Пример создания таблицы
(пример для СУБД PostgreSQL)

DDL. Пример создания таблицы(пример для СУБД PostgreSQL)

Слайд 9

DDL. Изменение объекта
ALTER [действия по изменению]

Alter table (add

column, alter column, drop column) – изменение таблицы
Alter view –

изменение представления
Alter database – изменение базы данных
Alter procedure – изменение процедуры

DDL. Изменение объекта	ALTER  [действия по изменению]Alter table (add column, alter column, drop column) – изменение таблицыAlter

Слайд 10

DDL. Удаление объекта
DROP



DDL. Удаление объекта	      DROP

Слайд 11DDL. Порядок создания и удаления объектов схемы:
Создается пользователь;
Создается база данных;
Создается

схема;
Создаются последовательности;
Создаются таблицы (сначала родительские, потом дочерние);
Создаются индексы, триггеры и

процедуры;
Создаются представления.

Удаление – в обратном порядке.
DDL. Порядок создания и удаления объектов схемы:Создается пользователь;Создается база данных;Создается схема;Создаются последовательности;Создаются таблицы (сначала родительские, потом дочерние);Создаются

Слайд 12DML
Операторы манипулирования данными:
Извлечение данных – SELECT;
Вставка новых данных – INSERT;
Изменение

данных – UPDATE;
Удаление данных – DELETE;
Объект работы – отношение (таблица)

или соединение отношений
Единица манипулирования – запись
DMLОператоры манипулирования данными:Извлечение данных – SELECT;Вставка новых данных – INSERT;Изменение данных – UPDATE;Удаление данных – DELETE;Объект работы

Слайд 13DML. Оператор SELECT
Оператор предназначен для извлечения из отношения или соединения

отношений набора записей, отвечающих заданным условиям.
Результат работы – новое отношение.
Реализует

все операции реляционной алгебры (объединение, пересечение, проекция, соединение, выборка)
DML. Оператор SELECTОператор предназначен для извлечения из отношения или соединения отношений набора записей, отвечающих заданным условиям.Результат работы

Слайд 14DML. Оператор SELECT
Формат:

SELECT
FROM
[WHERE

выборки>]
[ORDER BY ]
[GROUP BY ]
[HAVING

<условия отбора групп>]
DML. Оператор SELECTФормат:SELECT  FROM  [WHERE ] [ORDER BY ] [GROUP BY ] [HAVING ]

Слайд 15DML. Оператор SELECT
:
Реализует проекцию РА.
Указываются имена тех атрибутов, извлекаемых

из соединенных отношений, которые войдут в результат.
Для одноименных атрибутов указывается

отношение, из которого он извлекается (table.attribute)
Порядок вхождения определяется порядком перечисления.
Если нужно включить все атрибуты, указывается *.
Для переименования атрибута в результирующем отношении применяется ключевое слово AS (attribute as new_name);
Вместо атрибута в результат может вставляться результат, возвращаемый функцией (sin(angle) as “sine of angle”);
Для запрета повторений в результате используется директива DISTINCT
DML. Оператор SELECT:Реализует проекцию РА.Указываются имена тех атрибутов, извлекаемых из соединенных отношений, которые войдут в результат.Для одноименных

Слайд 16DML. Оператор SELECT
:
Реализует соединение РА.
Указываются имена соединяемых отношений, декартово

произведение которых формирует результат.
Для удобства записи каждому отношению может быть

присвоен псевдоним (name synonim1, synonim2)
Перечисление отношений:
Простое перечисление: FROM table1, table2, …
Полное декартово произведение;
Соединение по условию: FROM table1 [INNER | LEFT | RIGHT | FULL] JOIN table2 on
Декартово произведение, содержащее только строки, отвечающие условию
DML. Оператор SELECT:Реализует соединение РА.Указываются имена соединяемых отношений, декартово произведение которых формирует результат.Для удобства записи каждому отношению

Слайд 17Примеры соединения:
1) SELECT * FROM table1, table2
2) SELECT

* FROM table1 a INNER JOIN table2 b ON a.num=b.num

Примеры соединения:1)  SELECT * FROM table1, table22)  SELECT * FROM table1 a INNER JOIN table2

Слайд 18Примеры соединения:
3) SELECT * FROM table1 a XXX JOIN

table2 b ON a.num=b.num
XXX = LEFT

XXX = RIGHT XXX = FULL
Примеры соединения:3)  SELECT * FROM table1 a XXX JOIN table2 b ON a.num=b.num   XXX

Слайд 19DML. Оператор SELECT
:
Реализует выборку РА.
Указывается одно логическое выражение, которому

должны удовлетворять все записи соединенного отношения.
Записи, не удовлетворяющие условию, отбрасываются.
Допускаются

логические связки AND, OR, NOT.
Основные условия:
Для чисел и дат:
<, >, >=, <= , BETWEEN min AND max;
Для строк:
like ‘pattern’ – сравнение с образцом (_, %);
Для всех типов:
=, <> IS NULL, IS NOT NULL - для всех типов (нельзя = NULL!);
IN (set or subquery), EXISTS (subquery)
DML. Оператор SELECT:Реализует выборку РА.Указывается одно логическое выражение, которому должны удовлетворять все записи соединенного отношения.Записи, не удовлетворяющие

Слайд 20

Примеры условий
SELECT Фамилия, Курс FROM СТУДЕНТ WHERE Специальность=’Математика’ AND Курс=5

SELECT

Фамилия FROM СТУДЕНТ WHERE Специальность IN (’Математика’, ’Экономика’)

SELECT Фамилия, Специальность

FROM СТУДЕНТ WHERE НомерСтудента BETWEEN 200 AND 300

SELECT Фамилия, Специальность FROM СТУДЕНТ WHERE НомерСтудента >= 200 AND НомерСтудента <= 300

SELECT Фамилия AS ‘ФИО’ FROM СТУДЕНТ WHERE Фамилия LIKE ‘Р%’

SELECT Фамилия FROM СТУДЕНТ WHERE Курс IS NULL
Примеры условийSELECT Фамилия, Курс FROM СТУДЕНТ WHERE Специальность=’Математика’ AND Курс=5SELECT Фамилия FROM СТУДЕНТ WHERE Специальность IN (’Математика’,

Слайд 21Примеры условий на соединение
SELECT Фамилия FROM СТУДЕНТ WHERE НомерСтудента IN

(SELECT НомерСтудента FROM ЗАПИСЬ WHERE Предмет = ‘А’)

SELECT Фамилия FROM

СТУДЕНТ WHERE СТУДЕНТ.НомерСтудента IN (SELECT ЗАПИСЬ.НомерСтудента FROM ЗАПИСЬ WHERE ЗАПИСЬ.Предмет IN (SELECT ЗАНЯТИЯ. Предмет FROM ЗАНЯТИЯ WHERE ЗАНЯТИЯ.ДеньНедели = 2))

SELECT СТУДЕНТ.НомерСтудента, СТУДЕНТ.Фамилия, ЗАПИСЬ.Предмет FROM СТУДЕНТ, ЗАПИСЬ WHERE СТУДЕНТ.НомерСтудента = ЗАПИСЬ.НомерСтудента

SELECT НомерСтудента, Предмет, ДеньНедели FROM СТУДЕНТ, ЗАПИСЬ, ЗАНЯТИЯ WHERE СТУДЕНТ.НомерСтудента = ЗАПИСЬ.НомерСтудента AND ЗАПИСЬ.Предмет = ЗАНЯТИЯ. Предмет AND СТУДЕНТ.Фамилия = ‘Сидоров’
Примеры условий на соединениеSELECT Фамилия FROM СТУДЕНТ WHERE НомерСтудента IN (SELECT НомерСтудента FROM ЗАПИСЬ WHERE Предмет =

Слайд 22DML. Оператор SELECT
:
Указываются имена атрибутов, по значениям которых требуется

упорядочить записи в результате.
При указании более одного атрибута – лексикографическая

сортировка.
Для каждого атрибута может быть задано свое направление сортировки:
ASC – по возрастанию
DESC – по убыванию
Вместо имени атрибута может быть указан его порядковый номер в результате
Если направление сортировки не указано, сортировка производится по возрастанию
DML. Оператор SELECT:Указываются имена атрибутов, по значениям которых требуется упорядочить записи в результате.При указании более одного атрибута

Слайд 23Примеры сортировки
SELECT Фамилия, Специальность, Курс FROM СТУДЕНТ WHERE Специальность=’Экономика’ ORDER

BY Фамилия

SELECT Фамилия, Специальность, Курс FROM СТУДЕНТ WHERE Курс IN

(1, 2, 4) ORDER BY Фамилия ASC, 3 DESC

Примеры сортировкиSELECT Фамилия, Специальность, Курс FROM СТУДЕНТ WHERE Специальность=’Экономика’ ORDER BY ФамилияSELECT Фамилия, Специальность, Курс FROM СТУДЕНТ

Слайд 24
DML. Оператор SELECT Агрегирующие функции
При необходимости запрос может вернуть не сами

записи, а их агрегированные величины:
COUNT – количество значений поля
SUM –

сумма значений поля
MIN – минимальное значение поля
MAX – максимальное значение поля
AVG – среднее (арифметическое) значение поля
STDDEV – стандартное отклонение поля
В этом случае всегда возвращается ОДНА запись.
НЕЛЬЗЯ в один запрос вставлять поле и агрегированную величину:

SELECT COUNT([DISTINCT] ФАМИЛИЯ), SUM(СТИПЕНДИЯ) FROM СТУДЕНТЫ

SELECT ФАМИЛИЯ, COUNT(ИМЯ) FROM СТУДЕНТЫ
DML. Оператор SELECT Агрегирующие функцииПри необходимости запрос может вернуть не сами записи, а их агрегированные величины:COUNT –

Слайд 25DML. Оператор SELECT
:
Указываются имена атрибутов, одинаковые значения которых образуют

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

можно вычислить агрегированное значение (SUM, COUNT etc.).
Группировать можно только по тем атрибутам, которые указаны после SELECT, а не по любым атрибутам соединяемых отношений.
DML. Оператор SELECT:Указываются имена атрибутов, одинаковые значения которых образуют одинаковую групповую запись в результате.При использовании группировки для

Слайд 26DML. Оператор SELECT
:
Указываются требования, которым должны удовлетворять сформированные

группы, чтобы быть отобранными в результат.
Если группа не удовлетворяет условию,

она вся отбрасывается.
При использовании в одном запросе секций WHERE и HAVING сначала выполняется WHERE (отбор записей), потом GROUP BY (группировка), а потом – HAVING (отбраковка групп).
DML. Оператор SELECT:Указываются требования, которым должны удовлетворять сформированные группы, чтобы быть отобранными в результат.Если группа не удовлетворяет

Слайд 27Примеры группировки
SELECT Специальность, COUNT(*) FROM СТУДЕНТ
GROUP BY Специальность

SELECT Специальность, COUNT(*)

FROM СТУДЕНТ
GROUP BY Специальность HAVING COUNT(*) > 2

SELECT Специальность, MAX(НомерСтудента)

FROM СТУДЕНТ WHERE Курс = 4
GROUP BY Специальность HAVING COUNT(*) > 1

Примеры группировкиSELECT Специальность, COUNT(*) FROM СТУДЕНТ	GROUP BY СпециальностьSELECT Специальность, COUNT(*) FROM СТУДЕНТ	GROUP BY Специальность HAVING COUNT(*) >

Слайд 28Реализация теоретико-множественных операций
Объединение R1∪R2:
(SELECT * FROM R1) UNION (SELECT

* FROM R2)
Пересечение R1∩R2:
SELECT * FROM R1 WHERE IN (SELECT

* FROM R2)
Разность R1\R2:
SELECT * FROM R1 WHERE NOT IN (SELECT * FROM R2)
Симметрическая разность R1ΔR2:
(SELECT * FROM R1 WHERE NOT IN (SELECT * FROM R2))
UNION (SELECT * FROM R2 WHERE NOT IN (SELECT * FROM R1))
Декартово произведение R1×R2:
SELECT * FROM R1, R2
Реализация теоретико-множественных операций Объединение R1∪R2:	(SELECT * FROM R1) UNION (SELECT * FROM R2)Пересечение R1∩R2:	SELECT * FROM R1

Слайд 29DML. Оператор UPDATE
Оператор предназначен для изменения в отношении (или соединении

отношений, если это допускает БД) набора записей, отвечающих заданным условиям.
Изменяются

указанные в запросе поля записей.
Результат работы – отношение с измененными записями. Сам оператор никакого результата не возвращает (нельзя использовать в SELECT).
При обновлении могут срабатывать триггеры, а так же выполняться обновления значений внешних ключей в ссылающихся таблицах.
Запрос может быть не исполнен, если новое значение будет нарушать ограничения.
DML. Оператор UPDATEОператор предназначен для изменения в отношении (или соединении отношений, если это допускает БД) набора записей,

Слайд 30
DML. Оператор UPDATE
UPDATE
SET
[WHERE ]

Name – имя обновляемой

таблицы, или их соединение (join)*
Field – имя обновляемого поля
Val – присваиваемое полю значение (может

быть выражение, в том числе, использующее СТАРОЕ значение поля)
Condition – условие, которому должна удовлетворять обновляемая запись
DML. Оператор UPDATE		UPDATE 		SET 		[WHERE ]Name	–	имя обновляемой таблицы, или их соединение (join)*Field	–	имя обновляемого поляVal	–	присваиваемое полю значение (может

Слайд 31

Примеры обновления
UPDATE Факультеты f INNER JOIN Кафедры k ON f.ID

= k.FacID SET f.Бюджет = 0 WHERE k.Выпускающая=true

UPDATE persons SET

street = 'Nissestien 67', city = 'Sandnes' WHERE lastname = 'Tjessem' AND firstname = 'Jakob‘

UPDATE emp a
SET deptno = (SELECT deptno FROM dept WHERE loc = ‘BOSTON’),
(sal, comm) = (SELECT 1.1*AVG(sal), 1.5*AVG(comm) FROM emp b WHERE a.deptno = b.deptno)
WHERE deptno IN (SELECT deptno FROM dept WHERE loc =
‘DALLAS’ OR loc = ‘DETROIT’)

UPDATE sales SET SaleDate=Null, Count=0
Примеры обновленияUPDATE Факультеты f INNER JOIN Кафедры k ON f.ID = k.FacID SET f.Бюджет = 0 WHERE

Слайд 32DML. Оператор DELETE
Оператор предназначен для удаления в отношении (или соединении

отношений, если это допускает БД) набора записей, отвечающих заданным условиям.
Записи

удаляются целиком (нельзя удалить часть записи).
Результат работы – отношение с удаленными записями. Сам оператор никакого результата не возвращает (нельзя использовать в SELECT)
При удалении могут срабатывать триггеры, а так же выполняться
«об-null-ивание» значений внешних ключей в ссылающихся таблицах;
Удаление ссылающихся записей в ссылающихся таблицах
DML. Оператор DELETEОператор предназначен для удаления в отношении (или соединении отношений, если это допускает БД) набора записей,

Слайд 33
DML. Оператор DELETE
DELETE FROM
[WHERE ]

Name – имя таблицы или соединение (join)*
Condition – условие,

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

DML. Оператор DELETE		DELETE FROM 		[WHERE ]Name	–	имя таблицы или соединение (join)*Condition	–	условие, которому должны удовлетворять удаляемые записи

Слайд 34Примеры удаления
DELETE FROM products WHERE price = 10;

DELETE FROM products;

DELETE

FROM Authors a JOIN Articles b ON a.ID=b.Author
WHERE AuthorLastName='Henry';

Примеры удаленияDELETE FROM products WHERE price = 10;DELETE FROM products;DELETE FROM Authors a JOIN Articles b ON

Слайд 35DML. Оператор INSERT
Оператор предназначен для вставки в отношение одной или

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

отношение с добавленными записями. Сам оператор никакого результата не возвращает (нельзя использовать в SELECT)
При вставке записей могут срабатывать триггеры
Запись(и) может быть не вставлена, если нарушается условие на ее значения.
В качестве источника записей может быть использован оператор SELECT
Неуказанные в запросе поля принимают значение DEFAULT
DML. Оператор INSERTОператор предназначен для вставки в отношение одной или более записей.Записи вставляются целиком (нельзя вставить часть

Слайд 36DML. Оператор INSERT

INSERT INTO ([, ... ]) VALUES (,...)

INSERT

INTO VALUES (,...)

INSERT INTO SELECT FROM

WHERE

Name – имя таблицы
Col – имя столбца (поля)
Val – значение поля во вставляемой записи
SELECT – запрос, извлекающий набор записей, использующихся для вставки

DML. Оператор INSERTINSERT INTO ([, ... ]) VALUES (,...)INSERT INTO VALUES (,...)INSERT INTO SELECT FROM WHERE Name	–	имя

Слайд 37Примеры вставки
INSERT INTO films VALUES ('UA502', 'Bananas', 105, '1971-07-13', 'Comedy',

'82 minutes')

INSERT INTO films (code, title, did, date_prod, kind) VALUES

('T_601', 'Yojimbo', 106, '1961-06-16', 'Drama')

INSERT INTO films VALUES ('UA502', 'Bananas', 105, DEFAULT, 'Comedy', '82 minutes')

INSERT INTO films (code, title, did, date_prod, kind) VALUES ('B6717', 'Tampopo', 110, '1985-02-10', 'Comedy'),
('HG120', 'The Dinner Game', 140, DEFAULT, 'Comedy');

INSERT INTO films SELECT * FROM tmp_films WHERE date_prod < '2004-05-07';
Примеры вставкиINSERT INTO films VALUES ('UA502', 'Bananas', 105, '1971-07-13', 'Comedy', '82 minutes')INSERT INTO films (code, title, did,

Слайд 38Операторы управления пользователем БД
CREATE USER
ALTER DATABASE SET OWNER=
GRANT

ON TO
REVOKE ON FROM
DROP

USER
Операторы управления пользователем БДCREATE USER ALTER DATABASE SET OWNER=GRANT ON TO REVOKE ON FROM DROP USER

Слайд 39Привилегии пользователя
SELECT
INSERT
UPDATE
DELETE
REFERENCES
TRIGGER
ALL PRIVILEGES
GRANT SELECT ON mytable TO PUBLIC;
GRANT SELECT, UPDATE,

INSERT ON mytable TO admin;
GRANT SELECT (col1), UPDATE (col1) ON

mytable TO miriam_rw;

REVOKE INSERT ON films FROM PUBLIC;
REVOKE ALL PRIVILEGES ON kinds FROM manuel;
Привилегии пользователяSELECTINSERTUPDATEDELETEREFERENCESTRIGGERALL PRIVILEGESGRANT SELECT ON mytable TO PUBLIC;GRANT SELECT, UPDATE, INSERT ON mytable TO admin;GRANT SELECT (col1),

Слайд 40Управление транзакциями
Транзакция – последовательность логически связанных запросов, целенаправленно и логически

связанно меняющих состояние БД;
У транзакции имеется начало, набор точек сохранения

(отката) и конец.
В конце транзакцию можно применить (зафиксировать) или откатить
В процессе исполнения транзакции, до ее завершения (фиксации или отката) объекты, которыми на манипулирует, могут быть «захвачены»
Управление транзакциямиТранзакция – последовательность логически связанных запросов, целенаправленно и логически связанно меняющих состояние БД;У транзакции имеется начало,

Слайд 41Операторы управления транзакциями:
BEGIN – применяется для того, чтобы:
Зафиксировать, что транзакция

началась
Указать (при необходимости), какие объекты захватываются и уровень их

блокировки
SAVEPOINT
Указывает точку возврата, к которой можно откатиться при частичном откате транзакции
RELEASE SAVEPOINT
Удаление успешно пройденной точки возврата
Операторы управления транзакциями:BEGIN – применяется для того, чтобы:Зафиксировать, что транзакция началась Указать (при необходимости), какие объекты захватываются

Слайд 42Операторы управления транзакциями:
COMMIT – применяется для того, чтобы:
сделать «постоянными» все

изменения, сделанные в текущей транзакции (реально данные могут быть изменены

несколько позже)
очистить все точки сохранения данной транзакции
завершить транзакцию
освободить все блокировки данной транзакции

Операторы управления транзакциями:COMMIT – применяется для того, чтобы:сделать «постоянными» все изменения, сделанные в текущей транзакции (реально данные

Слайд 43Операторы управления транзакциями:
ROLLBACK – применяется для того, чтобы:
отменить все изменения,

внесённые начиная с момента начала транзакции или с какой-то точки

сохранения (SAVEPOINT).
очистить все точки сохранения данной транзакции
завершить транзакцию
освободить все блокировки данной транзакции
Операторы управления транзакциями:ROLLBACK – применяется для того, чтобы:отменить все изменения, внесённые начиная с момента начала транзакции или

Слайд 44Примеры:
BEGIN;
INSERT INTO table1 VALUES (1);
SAVEPOINT my_savepoint;
INSERT INTO

table1 VALUES (2);
ROLLBACK TO SAVEPOINT my_savepoint;
INSERT INTO table1

VALUES (3);
COMMIT;

BEGIN;
INSERT INTO table1 VALUES (3);
SAVEPOINT my_savepoint;
INSERT INTO table1 VALUES (4);
RELEASE SAVEPOINT my_savepoint;
COMMIT;

Примеры:BEGIN; INSERT INTO table1 VALUES (1); SAVEPOINT my_savepoint; INSERT INTO table1 VALUES (2); ROLLBACK TO SAVEPOINT my_savepoint;

Слайд 45Хранимые процедуры и триггеры
Используются для реализации сложной бизнес-логики (положений делового

регламента, не описываемых ограничениями);
Хранятся на сервере СУБД
Пишутся на расширенном языке

SQL, содержащем специальные операторы:
Передача управления (CALL, GO TO, RETURN)
Проверка условий (IF … ELSE, SWITCH)
Организация циклов (FOR, WHILE)
Хранимые процедуры и триггерыИспользуются для реализации сложной бизнес-логики (положений делового регламента, не описываемых ограничениями);Хранятся на сервере СУБДПишутся

Слайд 46Хранимые процедуры
Вызываются приложением, как запрос с использованием ключевого слова EXECUTE

или CALL;
Могут иметь аргументы и возвращать результат (в том числе

– отношение, как и SELECT);
Аргументы могут быть входящие и исходящие;
Могут выполнить любое количество запросов на SQL, в том числе – несколько транзакций;
Результаты внутренних запросов SELECT обрабатываются в виде курсоров
Хранимые процедурыВызываются приложением, как запрос с использованием ключевого слова EXECUTE или CALL;Могут иметь аргументы и возвращать результат

Слайд 47Курсор
Курсор – временная структура данных (аналог таблицы), хранящий результаты запроса

SELECT построчно
Предназначен для обработки в процедурах
Имеет операции
OPEN – открыть курсор
FETCH

– перейти к очередной записи
CLOSE – закрыть курсор
Бывают однонаправленные и реверсивные курсоры
КурсорКурсор – временная структура данных (аналог таблицы), хранящий результаты запроса SELECT построчноПредназначен для обработки в процедурахИмеет операцииOPEN

Слайд 48Пример хранимой процедуры
CREATE OR REPLACE PROCEDURE cs_create_job(v_job_id IN INTEGER) IS

a_running_job_count INTEGER;
PRAGMA AUTONOMOUS_TRANSACTION;

BEGIN
LOCK TABLE cs_jobs IN

EXCLUSIVE MODE;
SELECT count(*) INTO a_running_job_count FROM cs_jobs WHERE end_stamp IS NULL;
IF a_running_job_count > 0 THEN COMMIT;
raise_application_error(-20000, 'Unable to create a new job: a job is currently running.');
END IF;
DELETE FROM cs_active_job;
INSERT INTO cs_active_job(job_id) VALUES (v_job_id);
BEGIN INSERT INTO cs_jobs (job_id, start_stamp) VALUES (v_job_id, sysdate);
EXCEPTION WHEN dup_val_on_index THEN NULL;
END;
COMMIT;
END;
Пример хранимой процедурыCREATE OR REPLACE PROCEDURE cs_create_job(v_job_id IN INTEGER) IS a_running_job_count INTEGER; PRAGMA AUTONOMOUS_TRANSACTION;  BEGIN LOCK

Слайд 49Триггеры
Хранимые процедуры, привязываемые к таблицам, и вызываемые при ее изменении:
Вставка,

удаление и/или изменение записей
Триггеры бывают:
Табличные – вызывается при изменении для

всей таблицы 1 раз при изменении;
Строчные – вызывается при изменении для каждой записи;
У одной таблицы может быть несколько триггеров, одна и та же процедура может выполнять роль разных триггеров.
Триггеры могут быть «до» и «после»-триггеры.
Триггер имеет доступ как к старым (до изменения) так и новым (после изменения) данным.
ТриггерыХранимые процедуры, привязываемые к таблицам, и вызываемые при ее изменении:Вставка, удаление и/или изменение записейТриггеры бывают:Табличные – вызывается

Слайд 50Пример триггера
CREATE OR REPLACE TRIGGER DistrictUpdatedTrigger
AFTER UPDATE ON district

BEGIN
INSERT INTO info VALUES ('table "district" has changed');

END;


/* Триггер на уровне строки */
CREATE OR REPLACE TRIGGER DistrictUpdatedTrigger
AFTER UPDATE ON district FOR EACH ROW
BEGIN
INSERT INTO info VALUES ('one string in table "district" has changed');
END;
Пример триггераCREATE OR REPLACE TRIGGER DistrictUpdatedTrigger AFTER UPDATE ON district BEGIN  INSERT INTO info VALUES ('table

Обратная связь

Если не удалось найти и скачать доклад-презентацию, Вы можете заказать его на нашем сайте. Мы постараемся найти нужный Вам материал и отправим по электронной почте. Не стесняйтесь обращаться к нам, если у вас возникли вопросы или пожелания:

Email: Нажмите что бы посмотреть 

Что такое TheSlide.ru?

Это сайт презентации, докладов, проектов в PowerPoint. Здесь удобно  хранить и делиться своими презентациями с другими пользователями.


Для правообладателей

Яндекс.Метрика