plsql4_simple_block

advertisement
Разработка простого блока
PL/SQL
Структура блока PL/SQL

DECLARE - необязательно
◦ Переменные, константы, курсоры, пользовательские
исключения

BEGIN - обязательно
◦ Команды SQL
◦ Управляющие команды PL/SQL

EXCEPTION - необязательно
◦ Действия в случае возникновения ошибок

END; - обязательно
Переменные в PL/SQL




Переменные объявляются и инициализируются в
декларативной секции.
Новые значения переменных присваиваются в
секции исполняемого кода.
Значения передаются в блоки PL/SQL посредством
параметров.
Просмотр результатов осуществляется с помощью
выходных переменных.
Объявление переменных и
констант: синтаксис
идентификатор[CONSTANT] тип_данных [NOT NULL]
[:= | DEFAULT выражение];
Указания
 Используйте систему присвоения имен.
 Инициализируйте переменные и константы,
объявленные как NOT NULL.
 Инициализируйте идентификаторы с помощью
оператора присваивания (:=) или зарезервированного
слова DEFAULT.
 Объявляйте не более одного идентификатора на
строку.
Объявление скалярных
переменных



Не имеют внутренних компонент.
Хранят единственное значение.
Основные типы:
◦ BINARY_INTEGER
◦ NUMBER[(точность, масштаб)]
◦ СНАR[(максимальная_длина)]
◦ LONG
◦ LONG RAW
◦ VARCHAR2(максимальная_длина)
◦ DATE
◦ BOOLEAN
Объявление скалярных
переменных: примеры
v_gender
v_count
v_total_sal
v_order_date
c_tax_rate
v_valid
CHAR(1);
BINARY_INTEGER := 0;
NUMBER(9,2) := 0;
DATE := SYSDATE + 7;
CONSTANT NUMBER(3,2) := 8.25;
BOOLEAN NOT NULL := TRUE;
Атрибут %TYPE

Используется для объявления переменной:
◦ на основе другой ранее заданной переменной.
◦ на основе определения столбца базы данных.

Перед атрибутом %TYPE указываются:
◦ таблица и столбец базы данных.
◦ имя ранее заданной переменной.

PL/SQL определяет тип и размер переменной.
Атрибут %TYPE: примеры
DECLARE
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:
 Тип данных базового столбца базы данных может
быть неизвестен.
 Тип данных базового столбца базы данных может
меняться во время выполнения.
Составные типы данных

Составные типы данных:
◦ Таблицы PL/SQL
◦ Записи PL/SQL
◦ Содержат внутренние компоненты
◦ Пригодны для повторного использования

Таблицы PL/SQL:
◦ Состоят из двух компонент:
◦ Первичный ключ типа BINARY_INTEGER
◦ Столбец данных скалярного типа
◦ Увеличиваются динамически в силу отсутствия
ограничений.
Структура таблицы PL/SQL
Первичный ключ
Столбец
…
…
1
2
3
Jones
Smith
Maduro
...
BINARY_INTEGER
…
Скалярный тип
Объявление таблицы
PL/SQL

Синтаксис
TYPE
[NOT
type_name IS
TABLE
OF
scalar_datatype
NULL] INDEX BY BINARY_INTEGER;
Identifier type_name;

Пример
...
TYPE name_table_type IS TABLE OF VARCHAR2 (25)
INDEX BY BINARY_INTEGER;
first_name_table name_table_type;
last_name_table name_table_type;
...
Методы таблиц









EXISTS(n)
COUNT
FIRST
LAST
PRIOR(n)
NEXT(n)
EXTEND
TRIM
DELETE
Записи PL/SQL





Должны содержать одну или несколько компонент
(полей) скалярного типа, типа RECORD или типа
TABLE PL/SQL.
По структуре сходны с записями в языках третьего
поколения.
Не эквивалентны строкам таблицы базы данных.
Совокупность полей рассматривается как логическая
единица.
Удобны для выборки строки данных из таблицы для
обработки.
Структура записи PL/SQL
Поле1 (тип данных) Поле2 (тип данных) Поле3 (тип данных)
Объявление записи PL/SQL

Синтаксис
DECLARE
TYPE имя_типа IS RECORD
(имя_поля1 тип_поля
[NOT NULL] [{:=|DEFAULT} expr],
имя_поля2 тип_поля
[NOT NULL] [{: = |DEFAULT} expr],...);
идентификатор имя_типа;

Пример
DECLARE
TYPE emp_record_type IS RECORD
(first_name VARCHAR2(25),
last_name
VARCHAR2(25),
gender
CHAR(l));
employee_record emp_record_type;
Атрибут %ROWTYPE



Используется для объявления переменной на основе
совокупности столбцов в таблице или представлении
базы данных.
Перед %ROWTYPE указывается имя таблицы.
Поля записи наследуют имена и типы данных от
столбцов таблицы или представления.
Атрибут %ROWTYPE:
преимущества



Количество базовых столбцов и типы данных в них
могут быть неизвестны.
Количество и типы данных базовых столбцов могут
меняться во время выполнения.
Полезен при выборке строки с помощью команды
SELECT.
Пример:
...
dept_record s_dept%ROWTYPE;
emp_record s_emp%ROWTYPE;
...
Синтаксические правила для
блока PL/SQL



Команды могут занимать несколько строк.
Лексические единицы можно разделять пробелами.
Идентификаторы:
◦ Могут содержать до 30 символов.
◦ Не могут содержать зарезервированные слова (за
исключением случая, когда они заключены в двойные
кавычки).
◦ Должны начинаться с алфавитного символа.
◦ Не должны совпадать с именами столбцов таблицы базы
данных.
Синтаксические правила для
блока PL/SQL



Символьные литералы и литералы типа "дата"
должны быть заключены в апострофы.
Для чисел допускается как простая, так и научная
форма записи.
Комментарии могут занимать:
◦ несколько строк между /* и */.
◦ одну строку после --.
Вложенные блоки и область
видимости переменных





Предложения могут быть вложенными везде, где
допустима исполняемая команда.
Вложенный блок становится командой.
Секция исключений также может содержать вложенные
блоки.
Область видимости объекта - это часть программы, где
можно ссылаться на объект.
Идентификатор виден в тех областях, в которых на него
можно сослаться без квалификатора.
◦ Блок может ссылаться на идентификаторы во внешнем
блоке.
◦ Блок не может ссылаться на идентификаторы во
вложенном в него блоке.
Вложенные блоки и область
видимости переменных: пример
...
x binary_integer;
Область видимости Х
BEGIN
...
DECLARE
y NUMBER;
BEGIN
...
END;
...
END;
Область видимости У
Присвоение значений
переменным: синтаксис
identifier
:= expr;
plsql_table_name (primary_key_value) := ехрr;
plsql_record_name.field_name := ехрr;
Присвоение значений
переменным: примеры

Приравнивание максимальной заработной платы к
текущей.
v_max_sal := v_sal;

Запись фамилии "Maduro" в таблицу
PL/SQL с индексом 3
last_name_table (3) := 'Maduro’;

Сохранение основной информации о новом
служащем в записи PL/SQL.
emp_record.last_name := 'Maduro';
emp_record.first_name := 'Elena’;
emp_record.gender := 'F';
Присвоение значений
переменным: упражнение
DECLARE
v_weight NUMBER (3) := 600;
v_message VARCHAR2(255) := 'Product 10012’;
BEGIN
Sub-Block
DECLARE
v_weight NUMBER(3) := 1;
v_message VARCHAR2(255) := 'Product 11001';
v_new_loc VARCHAR2(50) := 'Europe';
BEGIN
v_weight := v_weight + 1;
v_new_loc := 'Western' || v_new_loc;
END;
v_weight := v_weight + 1;
v_message := v_message || 'is_in_stock';
v_new_loc := ‘Western’ || v_new_loc;
END;
Операторы в PL/SQL





Логические
Арифметические
Как в SQL
Оператор конкатенации
Оператор возведения в степень (**)
Скобки, определяющие порядок действий } Как в
SQL
Операторы в PL/SQL:
примеры

Увеличение счетчика циклов.
v_count := v_count + 1;

Установка значения логического флага.
v_equal := (v_n1 = v_n2);

Проверка наличия номера служащего.
v_valid := (v_emp_id IS NOT NULL);
Функции в PL/SQL

Доступные
◦ Числовые (однострочные)
◦ Символьные (однострочные)
как в SQL
◦ Для преобразования типов данных
◦ Для работы с датами

Недоступные (функции с произвольным количеством
параметров)
◦ GREATEST
◦ LEAST
◦ Групповые функции
◦ DECODE
Функции в PL/SQL: примеры

Создание списка рассылочных адресов для
организации.
v_mailing_address := v_name||CHR(10)||
v_address||CHR(10)||v_country||CHR(10)||
v_zip_code;

Перевод фамилии в символы верхнего регистра.
v_last_name := UPPER(v_last_name);
Преобразования типов
данных



Данные преобразуются в совместимые типы.
Смешение типов данных может привести к ошибке
и/или отразиться на производительности.
Функции преобразования:
◦ TO_CHAR
◦ TO_DATE
◦ ТО_NUMBER
Преобразования типов
данных: пример

Некорректное преобразование типов:
v_comment := USER||': '||SYSDATE;

Для корректного преобразования используется
функция TO_CHAR:
v_comment := USER||': ' ||ТО_CHAR(SYSDATE);
Ссылки на переменные, не
являющиеся переменными PL/SQL



На переменные, не являющиеся переменными
PL/SQL, можно ссылаться как на хост-переменные.
Ссылке должно предшествовать двоеточие (:).
Запись заработной платы за год в глобальную
переменную Procedure Builder:
:g_annual_salary := v_salary * 12;
Рекомендации по
программированию





Стремитесь к простоте сопровождения кода.
Пишите комментарии к коду.
Согласуйте использование строчных и прописных
букв.
Выработайте систему присвоения имен
идентификаторам и прочим объектам.
Используйте отступы для упрощения чтения кода.
Комментарии к коду
Комментарий может находиться:
 после двух дефисов (--)
 между /* и */.
Пример
...
v_sal NUMBER (9,2);
BEGIN
/* compute the annual salary based on the
monthly salary input from the user */
v_sal := v_sal * 12;
END;
Система обозначений
Соглашения
Команды SQL
Ключевые слова PL/SQL
Типы данных
Идентификаторы и
параметры
Таблицы базы данных и
столбцы
Примеры и регистр
символов
SELECT, INSERT
DECLARE, BEGIN, IF
VARCHAR2, BOOLEAN
v_sal, emp_cursor, g_sal
s_emp, order_date, id
Система присвоения имен
Идентификатор
Переменная
Константа
Курсор
Исключение
Тип TABLE
TABLE
Тип RECORD
RECORD
Соглашение
v_name
c_name
name_cursor
e_name
name_table_type
name_table
name_record_type
name_record
Пример
v_sal
c_company_name
emp_cursor
e_too_many
amount_table_type
order_total_table
emp_record_type
customer_record
Использование отступов
в коде
Для наглядности выделяйте каждый уровень кода
отступом.
Пример
...
BEGIN
IF x=0
THEN
Y=l;
END
...
END;
IF;
Заключение

Блоки PL/SQL состоят из следующих секций:
◦ Декларативная секция (необязательна)
◦ Секция исполняемого кода (обязательна)
◦ Секция обработки исключений (необязательна)

Идентификаторы PL/SQL:
◦ Определяются в декларативной секции.
◦ Могут иметь скалярный или составной тип данных.
◦ Могут быть основаны на структуре другой переменной
или объекта базы данных.
◦ Могут инициализироваться.
Download