plsql3_modul_programming

advertisement
Модульное
программирование и
подпрограммы
Что такое программные
единицы PL/SQL?


Именованные блоки PL/SQL
Три основных категории:
◦ Процедуры - осуществляют действия
◦ Функции - вычисляют значения
◦ Пакеты - объединяют логически связанные процедуры и
функции

Хранятся в базе данных или разрабатываются в виде
прикладных подпрограмм
Компоненты подпрограммы
HEADER - обязательно
◦ Имя, тип и аргументы подпрограммы
DECLARATIVE - необязательно
◦ Локальные идентификаторы
EXECUTABLE - обязательно
◦ Команды SQL
◦ Управляющие предложения PL/SQL
EXCEPTION HANDLING - необязательно
◦ Действия в случае возникновения ошибок
END; - обязательно
Создание подпрограммы
Выбор среды
Создание
подпрограммы
Компиляция кода
Вызов
подпрограммы
отладка
отладка
Создание процедуры:
синтаксис
PROCEDURE name
[(parameter,...)] IS pl/sql block;
где "параметр" имеет следующий синтаксис:
parameter_name [IN | OUT | IN OUT] datatype
[{:= | DEFAULT} expr]
Создание процедуры:
рекомендации




При разработке процедуры в SQL*Plus пользуйтесь
командой CREATE OR REPLACE
Укажите все параметры
Начните блок PL/SQL ключевым словом IS
После IS введите определения локальных
переменных или ключевое слово BEGIN
Виды параметров
процедуры
Вызывающая
среда
Процедура
Аргумент IN
Аргумент OUT
Аргумент IN OUT
(DECLARE)
BEGIN
EXCEPTION
END;
Виды формальных
параметров
IN
По умолчанию.
OUT
Необходимо указывать.
Значение: Передается в
подпрограмму.
Возвращается в
вызывающую среду.
Роль параметра: Константа.
Неинициализированная
переменная.
IN OUT
Необходимо указывать.
Передается в подпрограмму;
Возвращается в
вызывающую среду.
Инициализированная
переменная.
Фактический параметр: Может
быть переменной, выражением,
константой или
инициализированной
переменной.
Должен быть переменной.
Должен быть переменной
Создание процедуры:
пример
PROCEDURE change_salary
(v_emp_id IN NUMBER,
v_new_salary IN NUMBER)
IS
BEGIN
UPDATE s_emp
SET salary = v_new_salary
WHERE id = v_emp_id;
COMMIT;
END change_salary;
Процедура или функция?
Вызывающая
среда
Процедура
Аргумент IN
Аргумент OUT
Аргумент IN OUT
Вызывающая
среда
Функция
Аргумент IN
(DECLARE)
(DECLARE)
BEGIN
BEGIN
EXCEPTION
EXCEPTION
END;
END;
Сравнение функций и
процедур
Процедура
Исполняется как
предложение PL/SQL
Функция
Вызывается как часть
выражения
Оператор RETURN
Оператор RETURN не
должен возвращать тип
возвращает тип данных
данных
Может возвращать
Должна возвращать
значение
значение
Создание функции



Создайте функцию PL/SQL для возврата значения в
вызывающую среду
Включите в объявление функции оператор RETURN с
типом возвращаемых данных
Блок PL/SQL должен включать, по крайней мере, один
оператор RETURN
Создание функции:
синтаксис
FUNCTION name
[(parameter,...)]
RETURN datatype
IS
pl/sql_block;

Не забудьте включить в блок PL/SQL, по крайней
мере, один оператор RETURN
Создание функции:
пример

Возврат величины налога для данной суммы
FUNCTION tax
(v_value IN NUMBER)
RETURN NUMBER
IS
BEGIN
RETURN (v_value * .07);
END tax;
Вызов процедур из программы
Procedure Builder: пример

В командной строке Интерпретатора введите имя
процедуры. Если требуется, укажите параметры.
PL/SQL> change_salary (17, 1000);
Вызов процедуры из другой
процедуры: пример
PROCEDURE process_sal
(v_emp_id IN NUMBER,
v_new_salary IN NUMBER)
IS
BEGIN
change_salary (v_emp_id, v_new_salary);
--invoking procedure change_salary
...
END;
Вызов функции в Procedure Builder
1.
Создание переменной среды
.CREATE NUMBER name
CHAR
DATE
2.
Присваивание переменной среды значения,
возвращаемого функцией
Вывод на экран значения переменной среды
3.
Вызов отдельных функций из
программы Procedure Builder: пример

Вывод величины налога для заданной суммы
PL/SQL> .CREATE NUMBER x PRECISION 4
PL/SQL> :x := tax(100);
PL/SQL> TEXT_IO.PUT_LINE (TO_CHAR (:x));
7
Вызов функций в
командах SQL

Преимущества
◦ Возможность выполнения вычислений, трудно
осуществимых в SQL иными способами
◦ Повышение производительности запросов

Требования
◦ Только хранимые функции, а не процедуры
◦ Однострочные функции
◦ Отсутствие команд языка манипулирования данными
(DML)
◦ Формальные параметры должны быть входными (IN)
◦ Типы данных сервера Oracle, а не PL/SQL
◦ Привилегии EXECUTE
Вызов функции в команде
SQL
Допустимые предложения SQL:
 Список выборки в команде SELECT
 Условия в предложениях WHERE и HAVING
 Предложения CONNECT BY, START WITH, ORDER BY и
GROUP BY
 Предложение VALUES команды INSERT
 Предложение SET команды UPDATE
Вызов функции в команде
SQL: пример

В командной строке Интерпретатора введите команду
SQL с вызовом функции.
PL/SQL> SELECT total, tax(total)
+> FROM s_ord
+> WHERE id = 100;
TOTAL
TAX (TOTAL)
--------- -----------
601100.00
42077
Вызов подпрограмм в среде
SQL*Plus
Серверный вывод в
SQL*Plus

SET SERVEROUTPUT ON
 DBMS_OUTPUT.PUT_LINE(<значение>);
Заключение

Три основных категории подпрограмм:
◦ Процедуры, выполняющие действия
◦ Функции, вычисляющие значения
◦ Пакеты, объединяющие логически связанные процедуры
и функции

Два отличия функции от процедуры:
◦ Функция вызывается как часть выражения
◦ Функция должна возвращать значение
Download