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


БАЗЫ ДАННЫХ И СИСТЕМЫ УПРАВЛЕНИЯ БАЗАМИ ДАННЫХ

Содержание

Процедуры ФункцииПакетыТриггерыПрограммные объекты базы данных

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

Слайд 1Процедурное расширение языка PL/SQL
БАЗЫ ДАННЫХ И СИСТЕМЫ УПРАВЛЕНИЯ БАЗАМИ ДАННЫХ

Процедурное расширение языка PL/SQLБАЗЫ ДАННЫХ И СИСТЕМЫ УПРАВЛЕНИЯ БАЗАМИ ДАННЫХ

Слайд 2
Процедуры
Функции
Пакеты
Триггеры
Программные объекты базы данных

Процедуры ФункцииПакетыТриггерыПрограммные объекты базы данных

Слайд 3Преимущества PL\pgSQL
Модульная разработка программ
Объявление идентификаторов
Программирование с использованием управляющих структур процедурного

языка
Обработка ошибок
Повышение производительности

Преимущества PL\pgSQLМодульная разработка программОбъявление идентификаторовПрограммирование с использованием управляющих структур процедурного языкаОбработка ошибокПовышение производительности

Слайд 4Блочная структура PL/pgSQL
DECLARE – необязательно
Переменные, константы, курсоры, пользовательские исключения.
BEGIN –

обязательно
Операторы SQL.
Управляющие операторы PL/pgSQL.
EXCEPTION – необязательно
Действия, выполняемые при возникновении ошибки.
END;

– обязательно

Блочная структура PL/pgSQLDECLARE – необязательноПеременные, константы, курсоры, пользовательские исключения.BEGIN – обязательноОператоры SQL.Управляющие операторы PL/pgSQL.EXCEPTION – необязательноДействия, выполняемые

Слайд 5Пример блока PL/pgSQL
DECLARE
v_product_id s_product.id%TYPE;
BEGIN
SELECT id INTO v_product_id
FROM

s_product WHERE id =10;
DELETE FROM s_inventory
WHERE product_id

= v_product_id;
COMMIT;
EXCEPTION
WHEN OTHERS THEN
ROLLBACK;
INSERT INTO exception_table (message) VALUES ('Some error occurred in the database.');
COMMIT;
END;
Пример блока PL/pgSQLDECLARE v_product_id	s_product.id%TYPE;BEGIN SELECT id INTO v_product_id  FROM s_product WHERE id =10; DELETE FROM s_inventory

Слайд 6Программные конструкции PL/pgSQL
DECLARE
BEGIN
EXCEPTION
END;
Анонимный блок
Хранимая процедура/ функция
Триггер базы данных
Пакет процедур

Программные конструкции PL/pgSQLDECLAREBEGINEXCEPTIONEND;Анонимный  блокХранимая  процедура/ функцияТриггер базы данныхПакет процедур

Слайд 7Типы блоков
Анонимный Процедура Функция
[DECLARE]


BEGIN
--statements

[EXCEPTION]

END;

PROCEDURE name
AS

BEGIN
--statements

[EXCEPTION]

END;

FUNCTION

name
RETURN datatype
AS
BEGIN
--statements
RETURN value;
[EXCEPTION]

END;

Типы блоковАнонимный	     Процедура		Функция[DECLARE]BEGIN --statements[EXCEPTION]END;PROCEDURE nameASBEGIN --statements[EXCEPTION]END;FUNCTION nameRETURN datatypeASBEGIN --statements RETURN value;[EXCEPTION]END;

Слайд 8Переменные в PL/pgSQL
Переменные объявляются и инициализируются в секции DECLARE
Новые значения

переменных присваиваются в секции исполняемого кода
Значения передаются в блоки PL/pgSQL

посредством параметров
Просмотр результатов осуществляется с помощью выходных переменных
Переменные в PL/pgSQLПеременные объявляются и инициализируются в секции DECLAREНовые значения переменных присваиваются в секции исполняемого кодаЗначения передаются

Слайд 9Объявление переменных и констант: синтаксис
Указания
Инициализируйте идентификаторы с помощью оператора присваивания

(:=) или зарезервированного слова DEFAULT.
Объявляйте не более одного идентификатора на

строку.

identifier [CONSTANT] datatype [NOT NULL]
[:= | DEFAULT expr];

Объявление переменных и констант: синтаксисУказанияИнициализируйте идентификаторы с помощью оператора присваивания (:=) или зарезервированного слова DEFAULT.Объявляйте не более

Слайд 10Скалярные переменные
Не имеют внутренних компонент
Хранят единственное значение
Основные типы:
NUMBER [(точность, масштаб)]
CHAR

[(максимальная_длина)]
VARCHAR2(максимальная_длина)
DATE
BOOLEAN

Скалярные переменныеНе имеют внутренних компонентХранят единственное значениеОсновные типы:NUMBER [(точность, масштаб)]CHAR [(максимальная_длина)]VARCHAR2(максимальная_длина)DATEBOOLEAN

Слайд 11Объявление скалярных переменных: примеры
v_gender CHAR(1);
v_total_sal NUMBER(9,2) := 0;
v_order_date DATE := SYSDATE + 7;
c_tax_rate CONSTANT

NUMBER(3,2) := 8.25;
v_valid BOOLEAN NOT NULL := TRUE;

Объявление скалярных переменных: примерыv_gender	CHAR(1);v_total_sal	NUMBER(9,2) := 0;v_order_date	DATE := SYSDATE + 7;c_tax_rate	CONSTANT NUMBER(3,2) := 8.25;v_valid	BOOLEAN NOT NULL := TRUE;

Слайд 12Атрибут %TYPE
Используется для объявления переменной:
на основе другой ранее заданной переменной.
на

основе определения столбца базы данных.
Перед атрибутом %TYPE указываются:
таблица и столбец

базы данных.
имя ранее заданной переменной.

Атрибут %TYPEИспользуется для объявления переменной:на основе другой ранее заданной переменной.на основе определения столбца базы данных.Перед атрибутом %TYPE

Слайд 13Атрибут %TYPE: примеры
Преимущества использования атрибута %TYPE:
Тип данных базового столбца базы

данных может быть неизвестен.
Тип данных базового столбца базы данных может

меняться во время выполнения.

...
v_last_name s_emp.last_name%TYPE;
v_first_name s_emp.first_name%TYPE;
v_balance NUMBER(7,2);
v_minimum_balance v_balance%TYPE := 10;
...

Атрибут %TYPE: примерыПреимущества использования атрибута %TYPE:Тип данных базового столбца базы данных может быть неизвестен.Тип данных базового столбца

Слайд 14Атрибут %ROWTYPE
Используется для объявления переменной на основе совокупности столбцов в

таблице или представлении базы данных.
Перед %ROWTYPE указывается имя таблицы.
Поля записи

наследуют имена и типы данных от столбцов таблицы или представления
Атрибут %ROWTYPEИспользуется для объявления переменной на основе совокупности столбцов в таблице или представлении базы данных.Перед %ROWTYPE указывается

Слайд 15Атрибут %ROWTYPE: преимущества
Количество базовых столбцов и типы данных в них

могут быть неизвестны.
Количество и типы данных базовых столбцов могут меняться

во время выполнения.
Полезен при выборке строки с помощью команды SELECT

Пример:

...
dept_record s_dept%ROWTYPE;
emp_record s_emp%ROWTYPE;
...

Атрибут %ROWTYPE: преимуществаКоличество базовых столбцов и типы данных в них могут быть неизвестны.Количество и типы данных базовых

Слайд 16Присвоение значений переменным: синтаксис
identifier := expr;
SELECT col_list|*|const
INTO var_list|record|rowtype_var|var
FROM table_name

Присвоение значений переменным: синтаксисidentifier := expr;SELECT col_list|*|constINTO var_list|record|rowtype_var|varFROM table_name

Слайд 17Пример оператора SELECT .. INTO
DECLARE
order_row orders%rowtype;
BEGIN
SELECT *
INTO order_row
FROM orders
WHERE

order_no = 15;
order_row.data_ordered := ’15.02.2005’;
END;

Пример оператора  SELECT .. INTODECLARE order_row orders%rowtype;BEGIN	SELECT *	INTO order_row	FROM orders	WHERE order_no = 15;	order_row.data_ordered := ’15.02.2005’;END;

Слайд 18Типы программных единиц
Именованные блоки PL/pgSQL
Две основных категории:
Процедуры — осуществляют действия.
Функции

— вычисляют значения.
Хранятся в базе данных

Типы программных единицИменованные блоки PL/pgSQLДве основных категории:Процедуры — осуществляют действия.Функции — вычисляют значения.Хранятся в базе данных

Слайд 19Синтаксические правила для блока PL/pgSQL
Команды могут занимать несколько строк.
Лексические единицы можно

разделять пробелами.
Символьные литералы и литералы типа “дата“ должны быть заключены

в апострофы.
Комментарии могут занимать:
несколько строк между /* и */.
одну строку после --.

Синтаксические правила для блока PL/pgSQLКоманды могут занимать несколько строк.Лексические единицы можно разделять пробелами.Символьные литералы и литералы типа

Слайд 20Синтаксические правила для блока PL/pgSQL
Идентификаторы:
Могут содержать до 30 символов.
Не могут содержать

зарезервированные слова (за исключением случая, когда они заключены в двойные

кавычки).
Должны начинаться с алфавитного символа.
Не должны совпадать с именами столбцов таблицы базы данных

Синтаксические правила для блока PL/pgSQLИдентификаторы:Могут содержать до 30 символов.Не могут содержать зарезервированные слова (за исключением случая, когда

Слайд 21Вложенные блоки и область видимости переменных
Команды могут быть вложенными везде,

где допустима исполняемая команда.
Вложенный блок становится командой.
Секция исключений также может

содержать вложенные блоки.
Область видимости объекта — это часть программы, где можно ссылаться на объект.
Идентификатор виден в тех областях, где на него можно сослаться без квалификатора.
Блок может ссылаться на идентификаторы во внешнем блоке.
Блок не может ссылаться на идентификаторы во вложенном в него блоке
Вложенные блоки и область видимости переменныхКоманды могут быть вложенными везде, где допустима исполняемая команда.Вложенный блок становится командой.Секция

Слайд 22Вложенные блоки и область видимости переменных: пример
...
x BINARY_INTEGER;
BEGIN
...

DECLARE
y NUMBER;
BEGIN
...
END;
...
END;
Область видимости

y

Область видимости x

Вложенные блоки и область видимости переменных: пример... x BINARY_INTEGER;BEGIN ... DECLARE  y NUMBER; BEGIN  ...

Слайд 23Создание процедуры: синтаксис
где “параметр“ имеет следующий синтаксис:


Не задавайте ограничений на

тип данных.
CREATE OR REPLACE PROCEDURE name
[(parameter,...)]
AS
pl/sql_block;
parameter_name [IN | OUT

| IN OUT] datatype
Создание процедуры: синтаксисгде “параметр“ имеет следующий синтаксис: Не задавайте ограничений на тип данных.CREATE OR REPLACE PROCEDURE name

Слайд 24Виды формальных параметров

Виды формальных параметров

Слайд 25Создание процедуры
CREATE OR REPLACE PROCEDURE change_salary
(v_emp_id IN NUMBER,
v_new_salary

IN NUMBER)
AS
BEGIN
UPDATE s_emp
SET salary = v_new_salary
WHERE

id = v_emp_id;
COMMIT;
END;
Создание процедурыCREATE OR REPLACE PROCEDURE change_salary		(v_emp_id IN NUMBER,	 	 v_new_salary IN NUMBER)ASBEGIN		UPDATE 	s_emp	 	 SET 		salary =

Слайд 26Вызов процедуры
CALL имя процедуры (параметры)
CALL change_salary(2314, 20000)

Вызов процедурыCALL имя процедуры (параметры)CALL change_salary(2314, 20000)

Слайд 27Создание функции: синтаксис
CREATE OR REPLACE FUNCTION name [(parameter,...)]
RETURNS datatype
AS
pl/sql_block;
Не забудьте

включить в блок PL/SQL по крайней мере один оператор RETURN

Создание функции: синтаксисCREATE OR REPLACE FUNCTION name 		[(parameter,...)]RETURNS datatypeASpl/sql_block;Не забудьте включить в блок PL/SQL по крайней мере

Слайд 28Создание функции: пример
FUNCTION tax
(v_value IN NUMBER)
RETURNS NUMBER
AS
BEGIN
RETURN (v_value * 0.07);
END;
Возврат

величины налога (7%) для данной суммы

Создание функции: примерFUNCTION tax		(v_value IN NUMBER)		RETURNS NUMBERASBEGIN		RETURN (v_value * 0.07);END;Возврат величины налога (7%) для данной суммы

Слайд 29
Функции
CREATE FUNCTION check_sal RETURN Boolean IS
dept_id employees.department_id%TYPE;
empno

employees.employee_id%TYPE;
sal employees.salary%TYPE;
avg_sal employees.salary%TYPE;
BEGIN
empno:=205;
SELECT

salary,department_id INTO sal,dept_id
FROM employees WHERE employee_id= empno;
SELECT avg(salary) INTO avg_sal FROM employees
WHERE department_id=dept_id;
IF sal > avg_sal THEN
RETURN TRUE;
ELSE
RETURN FALSE;
END IF;
EXCEPTION
WHEN NO_DATA_FOUND THEN
RETURN NULL;
END; /
ФункцииCREATE FUNCTION check_sal RETURN Boolean IS dept_id employees.department_id%TYPE; empno  employees.employee_id%TYPE; sal   employees.salary%TYPE; avg_sal

Слайд 30Сравнение функций и процедур

Сравнение функций и процедур

Слайд 31Вызов функции в команде SQL
Допустимые предложения SQL:
Список выборки в команде

SELECT
Условие в предложениях WHERE и HAVING
Предложения CONNECT BY, START WITH,

ORDER BY и GROUP BY
Предложение VALUES команды INSERT
Предложение SET команды UPDATE
Вызов функции в команде SQLДопустимые предложения SQL:Список выборки в команде SELECTУсловие в предложениях WHERE и HAVINGПредложения CONNECT

Слайд 32Вызов функции в команде SQL: пример
SELECT total, tax(total) FROM

s_ord WHERE id = 100;


TOTAL

TAX(TOTAL) ------------- ---------- 601100.00 42077
Вызов функции в команде SQL: примерSELECT total, tax(total)  FROM  s_ord  WHERE  id =

Слайд 33Вызов процедур и функций
Вызов процедур и функций возможен:
Из других

процедур и функций
Из триггеров
Из внешних программ
Из анонимных блоков SQL

Вызов процедур и функций Вызов процедур и функций возможен:Из других процедур и функцийИз триггеровИз внешних программИз анонимных

Слайд 34Управление потоком операций в PL/SQL
Логический поток операций можно изменять c

помощью управляющих структур
Структуры условного управления (оператор IF).
Циклы:
Простой цикл
Цикл FOR
Цикл

WHILE
Оператор EXIT

Управление потоком операций в PL/SQLЛогический поток операций можно изменять  c помощью управляющих структур Структуры условного управления

Слайд 35Оператор IF: синтаксис
Действия можно выполнять выборочно в зависимости от определенных

условий:








ELSIF — одно слово.
END IF — два слова.
Предложение ELSE может

быть только одно

IF condition THEN
statements;
[ELSIF condition THEN
statements;]
[ELSE
statements;]
END IF;

Оператор IF: синтаксисДействия можно выполнять выборочно в зависимости от определенных условий:  ELSIF — одно слово.END IF

Слайд 36Пример использования оператора IF
. . .
IF v_start > 100 THEN

RETURN (2 * v_start);
ELSIF v_start >= 50 THEN


RETURN (.5 * v_start);
ELSE
RETURN (.1 * v_start);
END IF;
. . .
Пример использования оператора IF. . .IF v_start > 100 THEN RETURN (2 * v_start);ELSIF v_start >= 50

Слайд 37Циклы
Цикл позволяет выполнить последовательность команд несколько раз.
Три типа циклов:
Простой цикл
Цикл

FOR
Цикл WHILE

ЦиклыЦикл позволяет выполнить последовательность команд несколько раз.Три типа циклов:Простой циклЦикл FORЦикл WHILE

Слайд 38Простой цикл: синтаксис
Многократное выполнение команд с помощью простого цикла.





Без предложения

EXIT цикл был бы бесконечным
LOOP


statement1;
. . .
EXIT [WHEN condition];
END LOOP;
Простой цикл: синтаксисМногократное выполнение команд с помощью простого цикла.  Без предложения EXIT цикл был бы бесконечнымLOOP

Слайд 39Цикл FOR: синтаксис
Цикл FOR - это быстрый способ установки количества

повторов цикла







FOR index in [REVERSE]
lower_bound..upper_bound LOOP
statement1;

statement2;
. . .
END LOOP;
Цикл FOR: синтаксисЦикл FOR - это быстрый способ установки количества повторов циклаFOR index in [REVERSE] 	 	lower_bound..upper_bound

Слайд 40Цикл FOR: пример
FOR ind in 1..100 LOOP
INSERT INTO

s_item (ord_id, item_id)
VALUES (v_ord_id, v_counter);
END LOOP;

Цикл FOR: примерFOR ind in 1..100 LOOP  INSERT INTO s_item (ord_id, item_id)   VALUES (v_ord_id,

Слайд 41Цикл WHILE: синтаксис
Цикл WHILE используется для повторения цикла в течение

всего времени, пока выполняется условие
WHILE condition LOOP
statement1;
statement2;
.

. .
END LOOP;
Цикл WHILE: синтаксисЦикл WHILE используется для повторения цикла в течение всего времени, пока выполняется условиеWHILE condition LOOP

Слайд 42Цикл WHILE: пример
. . .
v_ord_id s_item.ord_id%TYPE := 101;
v_counter NUMBER(2) :=

1;
BEGIN
. . .
WHILE v_counter

INTO s_item (ord_id, item_id)
VALUES (v_ord_id, v_counter);
v_counter := v_counter + 1;
END LOOP;
. . .
Цикл WHILE: пример. . . v_ord_id	s_item.ord_id%TYPE := 101; v_counter	NUMBER(2) := 1;BEGIN. . . WHILE v_counter

Слайд 43Пакет – это совокупность логически связанных процедур и функций.

Пакет обязательно

содержит
Спецификацию
Тело пакета (package body)
Пакеты

Пакет – это совокупность логически связанных процедур и функций.Пакет обязательно содержит СпецификациюТело пакета (package body)Пакеты

Слайд 44Описывает интерфейс к возможностям пакета.
В спецификации объявляются доступные извне

типы, переменные, константы, исключения, курсоры и подпрограммы.


Спецификация пакета

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

Слайд 45CREATE OR REPLACE PACKAGE имя_модуля {IS AS} описание_процедуры | описание_функции

| объявление_переменной | определение_типа | объявление_исключительной_ситуации | объявление_курсора |
END

[имя_модуля];

Спецификация пакета

CREATE OR REPLACE PACKAGE имя_модуля {IS AS} описание_процедуры | описание_функции | объявление_переменной | определение_типа | объявление_исключительной_ситуации |

Слайд 46Реализует спецификацию и полностью определяет курсоры и подпрограммы.
В теле

пакета находятся скрытые от приложения детали реализации и объявления частных

объектов.

Тело пакета

Реализует спецификацию и полностью определяет курсоры и подпрограммы. В теле пакета находятся скрытые от приложения детали реализации

Слайд 47CREATE OR REPLACE PACKAGE BODY имя_модуля
{IS AS}
код_инициализации_процедуры |

код_инициализации_функции |
END [имя_модуля];
Тело пакета

CREATE OR REPLACE PACKAGE BODY имя_модуля {IS AS} 	код_инициализации_процедуры | код_инициализации_функции | END [имя_модуля];Тело пакета

Слайд 48Пакеты: пример
CREATE OR REPLACE PACKAGE test_pkg IS
FUNCTION Add_Two_Num(A IN

NUMBER,
B IN NUMBER) RETURN NUMBER;
FUNCTION FACTORIAL(NUM IN NUMBER)

RETURN NUMBER;
END test_pkg;
Пакеты: примерCREATE OR REPLACE PACKAGE test_pkg IS 	FUNCTION Add_Two_Num(A IN NUMBER, 		B IN NUMBER) RETURN NUMBER; 	FUNCTION

Слайд 49Пакеты: пример
CREATE OR REPLACE PACKAGE BODY test_pkg IS

FUNCTION Add_Two_Num(A

IN NUMBER, B IN NUMBER) RETURN NUMBER IS
BEGIN
RETURN

(A + B);
END Add_Two_Num;

FUNCTION FACTORIAL(NUM IN NUMBER) RETURN NUMBER IS
BEGIN
IF (NUM <=1) THEN RETURN (NUM);
ELSE RETURN (NUM * FACTORIAL(NUM-1));
END IF;
END FACTORIAL;

END test_pkg;
Пакеты: примерCREATE OR REPLACE PACKAGE BODY test_pkg IS 		FUNCTION Add_Two_Num(A IN NUMBER, B IN NUMBER) RETURN NUMBER

Слайд 50Пакеты
Имя_пакета.имя_процедуры(параметры)
test_pkg.FACTORIAL(5)

ПакетыИмя_пакета.имя_процедуры(параметры)test_pkg.FACTORIAL(5)

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

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

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

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

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


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

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