Процедуры Базы данных: учебный курс Некоторые операции, рассматриваемые как неделимые, трудно выразить с помощью одного запроса к БД. Примеры: занести.

Презентация:



Advertisements
Похожие презентации
БАЗЫ ДАННЫХ ЛЕКЦИЯ 12. тема: ОСНОВЫ ЯЗЫКА SQL Общие сведения SQL структурированный язык запросов (Structured Query Language)
Advertisements

Обеспечение целостности данных Процедурное. Хранимые процедуры Хранимые процедуры пишутся на специальном встроенном языке программирования, они могут.
PL/SQL Триггеры (INSERT, UPDATE, DELETE). Определение Три́ггер базы данных (англ. trigger) это хранимая процедура особого типа, которую пользователь не.
Triggers для mysql. Что есть триггер? Триггер - это хранимая процедура особого типа, исполнение которой обусловлено наступлением определенного события.
CREATE TABLE Ident_table ( ID int IDENTITY(1, 1), some_values varchar(50)); IDENTITY [ ( seed, increment ) ]
База данных База данных – это конкретная предметная область, описанная с помощью таблиц.
Java Database Connectivity (JDBC) Универсальное API для доступа к данным.
«ИЗМЕНЕНИЕ ДАННЫХ В БД» Выполнил: студент 722 группы Специальности Информационные системы (по отрослям) Токарев Виктор.
PL/SQL Триггер блок PL/SQL, выполняемый неявно каждый раз, когда происходит конкретное событие.
Введение в SQL (НЕ select) Затрагиваемые темы Роль языка SQL. Части SQL Роль языка SQL. Части SQL Администрирование БД: привилегии (DCL) Администрирование.
Разработка телекоммуникационной и информационной системы для прогнозирования аварий и катастроф на НПЗ.
Создание Web страниц Урок 12: PHP & MySQL Павел Бочаров.
Java : доступ к базам данных, технология JDBC. Примеры баз данных.
1 Особенности работы MySQL 5.0 и перспективы развития СУБД Михаил Серов (1234ru), инструктор авторизованного учебного центра MySQL в Москве Григорий Рубцов.
Программируемый клиент ORACLE Технология Pro C/C++
Администрирование информационных систем Администрирование БД. Управление разрешениями.
Дискретные и автономные транзакции (начиная с версии Oracle8i)
Лекция 3 Домены Ограничения на значения столбцов Создание, изменение и удаление таблиц Ключи и ссылочная целостность Защита таблиц.
Язык SQL Последовательности Представления Индексы.
5.2. Представление о мире (VIEW)Представления предназначены для сохранения результатов выполнения запросов в виде таблиц. В отличие от хранимых процедур.
Транксрипт:

Процедуры Базы данных: учебный курс Некоторые операции, рассматриваемые как неделимые, трудно выразить с помощью одного запроса к БД. Примеры: занести данные о названиях дней недели в таблицу – 7 операций вставки; выполнить банковскую проводку с занесением двух операций по дебету и кредиту;

Процедуры Базы данных: учебный курс Синтаксис для создания процедур может различаться в различных БД. Вот типичный пример запроса на создание процедуры в MS SQL Server: CREATE PROCEDURE int = 0 AS BEGIN DROP TABLE Weekdays; CREATE TABLE Weekdays(DayNumber INTEGER, DayName VARCHAR(20), PRIMARY KEY(DayNumber)); INSERT INTO WeekDays(DayNumber, DayName) 'Monday'); INSERT INTO WeekDays(DayNumber, DayName) 'Tuesday'); INSERT INTO WeekDays(DayNumber, DayName) 'Wednesday'); INSERT INTO WeekDays(DayNumber, DayName) 'Thursday'); INSERT INTO WeekDays(DayNumber, DayName) 'Friday'); INSERT INTO WeekDays(DayNumber, DayName) 'Saturday'); INSERT INTO WeekDays(DayNumber, DayName) 'Sunday'); END

JDBC – Создание и вызов процедур Базы данных: учебный курс // Подключаемся к драйверу базы данных Connection conn = null; Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); conn = DriverManager.getConnection( "jdbc:sqlserver:// \\SQLAKOUB;databaseName=academy;" + "user=sa;password=*****"); // Подготавливаем вызов хранимой процедуры CallableStatement cst = conn.prepareCall("Exec CreateWeek 1"); // Осуществляем вызов cst.execute();

Процедуры с выходными параметрами Базы данных: учебный курс Изменим наш пример таким образом, чтобы процедура формировала некоторое значение в качестве результата: ALTER PROCEDURE int = int OUTPUT AS BEGIN DROP TABLE Weekdays; CREATE TABLE Weekdays(DayNumber INTEGER, DayName VARCHAR(20), PRIMARY KEY(DayNumber)); INSERT INTO WeekDays(DayNumber, DayName) 'Monday'); INSERT INTO WeekDays(DayNumber, DayName) 'Tuesday'); INSERT INTO WeekDays(DayNumber, DayName) 'Wednesday'); INSERT INTO WeekDays(DayNumber, DayName) 'Thursday'); INSERT INTO WeekDays(DayNumber, DayName) 'Friday'); INSERT INTO WeekDays(DayNumber, DayName) 'Saturday'); INSERT INTO WeekDays(DayNumber, DayName) 'Sunday'); = (SELECT Max(DayNumber) FROM Weekdays); END

JDBC – Работа с выходными параметрами Базы данных: учебный курс // Подготавливаем вызов хранимой процедуры CallableStatement cst = conn.prepareCall("Exec CreateWeek ?, ?"); // Подготавливаем параметры (входные и выходные) cst.setInt(1, 0); cst.registerOutParameter(2, Types.INTEGER); // Осуществляем вызов cst.execute(); // Доступ к значению выходного параметра: System.out.println(cst.getInt(2));

JDBC – Работа с именованными параметрами Базы данных: учебный курс // Подготавливаем вызов хранимой процедуры CallableStatement cst = conn.prepareCall( // Подготавливаем параметры (входные и выходные) cst.setInt("first", 0); cst.registerOutParameter("maxnum", Types.INTEGER); // Осуществляем вызов cst.execute(); // Доступ к значению выходного параметра: System.out.println(cst.getInt("maxnum")); Синтаксис вызова может отличаться в разных БД и даже с разными драйверами. Например, в других БД вызов мог бы выглядеть Call CreateWeek(?,?) {CreateWeek(?,?)} и т.д.

Более сложные процедуры Базы данных: учебный курс CREATE FUNCTION INT) RETURNS VARCHAR(20) AS BEGIN RETURN WHEN 0 THEN 'Monday' WHEN 1 THEN 'Tuesday' WHEN 2 THEN 'Wednesday' WHEN 3 THEN 'Thursday' WHEN 4 THEN 'Friday' WHEN 5 THEN 'Saturday' WHEN 6 THEN 'Sunday' END В разных БД есть синтаксис для исполнения программ, подобный синтаксису обычных языков программирования. Например, в Transact-SQL:

Более сложные процедуры Базы данных: учебный курс CREATE PROCEDURE INT = 0 AS BEGIN INT; = 0; = (7 % 7; DROP TABLE Weekdays; CREATE TABLE Weekdays(DayOrder INT, DayNumber INT, DayName VARCHAR(20), PRIMARY KEY(DayNumber)); WHILE < 7) BEGIN INSERT INTO WeekDays(DayOrder, DayNumber, + 1; = + 1) % 7; END Теперь наша процедура по созданию таблицы в Transact-SQL могла бы выглядеть так:

Другие объекты в БД Базы данных: учебный курс Представления (VIEW): виртуальные таблицы Новое представление создается с помощью предложения CREATE VIEW, например: CREATE VIEW Weekend AS SELECT * FROM Weekdays WHERE DayOrder >= 5 Теперь это представление можно использовать как обычную таблицу, например: SELECT DayName FROM Weekend И даже: INSERT INTO Weekend (DayOrder, DayNumber, DayName) VALUES (7, 8, 'Googleday') Обычно представления используют для создания запросов, используемых позже в качестве «подзапросов»: CREATE VIEW MaxPercent AS SELECT Uid, Max([Percent]) AS MaxPercent FROM pu GROUP BY Uid SELECT Name, MaxPercent FROM Users INNER JOIN MaxPercent ON Users.Id = MaxPercent.Uid

Другие объекты в БД Базы данных: учебный курс Функции, возвращающие таблицу Представления не могут быть параметризованы. Однако, во многих БД (MS SQL Server) существует мощный механизм, позволяющий создавать параметризованные функции, возвращающие таблицу. Сначала создадим «общую виртуальную таблицу процентов» CREATE VIEW UsersPercent AS SELECT Uid, Sum([Percent]) AS SumPercent FROM pu GROUP BY Uid CREATE FUNCTION INT) RETURNS TABLE AS RETURN SELECT Users.*, SumPercent FROM Users INNER JOIN UsersPerecent ON Users.Id = UsersPercent.Uid WHERE SumPercent SELECT fu.* FROM FreeUsers(80) AS fu

Другие объекты в БД Базы данных: учебный курс Триггеры: реакция на события внутри БД CREATE TRIGGER trigger_name ON table_view_name FOR [AFTER | INSTEAD OF] [INSERT][,][UPDATE][,][DELETE] AS sql_statement Триггеров на одну таблицу может быть несколько; порядок исполнения можно определить дополнительно; Триггеры исполняются после того, как исполнены каскадные действия ( AFTER ) или до исполнения каскадных действий ( INSTEAD OF ); Если проверка выявила необходимость отмены действия, то такую отмену можно выполнить непосредственно из тела триггера ( ROLLBACK TRANSACTION ); В теле триггера можно использовать псевдо-таблицы inserted и deleted, содержащие информацию об измененных записях; Из тела триггера можно вызывать другие процедуры и функции. CREATE TRIGGER CheckNewDay ON Weekdays FOR INSERT, UPDATE AS INT = = Max(DayOrder) FROM inserted IF 6) ROLLBACK TRANSACTION