Слайд 4Структура блока PL/SQL:
DECLARE - необязательно
Константы, переменные, типы, курсоры, пользовательские
исключения
BEGIN - обязательно
Команды SQL
Команды PL/SQL
EXCEPTION - необязательно
Действия при возникновении ошибки
END; - обязательно
Слайд 5Секция объявлений
DECLARE
v_date_time TIMESTAMP;
….
Слайд 6Секция исключительных ситуаций
EXCEPTION
WHEN OTHERS
THEN
DBMS_OUTPUT.PUT_LINE(sqlerrm);
End;
Слайд 7Минимальный блок pl/sql
Begin
NULL;
End;
Слайд 9Типы блоков
Анонимные блоки
Процедуры
Функции
Слайд 10Типы переменных
Переменные PL/SQL
Скалярные
Составные
Ссылочные
LOB (большие объекты)
Прочие переменные (не PL/SQL)
Связанные переменные и хост-переменные
Слайд 13Требование к переменным
должны начинаться с буквы
могут включать буквы и цифры
могут включать
специальные символы, например, знак доллара ($), символы подчеркивания (_) и решетки (#)
максимальная длина – 30 символов
не могут быть зарезервированными словами.
identifier [CONSTANT] datatype [NOT NULL] [:= | DEFAULT expr];
Слайд 14Ключевые слова
Select keyword, length
From v_$reserved_words
Where (length>1 or keyword = ‘A’)
And keyword
!= ‘<‘
Order by keyword
Слайд 15
Переменные инициализируются всякий раз при входе в блок. По умолчанию переменные
принимают неопределенное значение NULL.
Переменную можно инициализировать в декларативной секции, в том числе и с использованием ключевого слова DEFAULT.
Переменные, не имеющие стандартного начального значения можно инициализировать с использованием знака присваивания ":=".
Если переменная имеет ограничение NOT NULL - присвоить неопределенное значение такой переменной невозможно.
Слайд 17Атрибут %TYPE
Атрибут %TYPE позволяет объявлять переменную типа, соответствующего:
типу другой переменной;
типу столбца
базы данных.
Например:
var1 REAL(14,2);
var2 var1%TYPE; - Переменная var2 будет иметь тип как var1
var_f1 user1.tbl1.f1%TYPE; - Переменная var_f1 будет иметь тот же тип, что и поле f1 таблицы tbl1 пользователя user1
Слайд 18Атрибут %ROWTYPE
Атрибут %ROWTYPE позволяет объявлять переменную типа "запись", соответствующую строке таблицы.
Переменная такого типа имеет поля, совпадающие с полями таблицы по имени и типу.
DECLARE
tbl1_rec1 tbl1%ROWTYPE;
- Для строки из таблицы tbl1
tbl1_rec2 tbl1%ROWTYPE;
CURSOR c1 IS SELECT * FROM tbl1;
emp_rec2 c1%ROWTYPE;
- Для строки курсора с1,
- созданного из таблицы tbl1
emp_rec3 с1%ROWTYPE;
BEGIN
SELECT * INTO tbl1_rec1 FROM tbl1
WHERE tbl1.f1=1;
emp_rec2 := emp_rec1;
- Присвоение значения всем полям записи
END
Слайд 19Составные типы данных
PL/SQL RECORD (запись)
PL/SQL TABLE (таблица)
Nested TABLE (вложенная
таблица)
VARRAY (массив переменной длины)
Слайд 20Записи PL/SQL
TYPE type_name IS RECORD
( field_name1 {field_type |
variable%TYPE | table.column%TYPE
| table%ROWTYPE} [NOT NULL],
field_name2 {field_type | variable%TYPE | table.column%TYPE
| table%ROWTYPE} [NOT NULL],
...);
Слайд 21Таблицы PL/SQL
Тип данных, который подобен таблицам базы данных. Таблица PL/SQL должна
содержать два компонента:
Главный ключ типа BINARY_INTEGER, по которому индексируется таблица PL/SQL.
Столбец скалярного типа данных или типа RECORD.
TYPE type_name IS TABLE OF { column_type | variable%TYPE | table.column%TYPE } [NOT NULL] INDEX BY BINARY_INTEGER;
Слайд 22
TYPE type_name IS TABLE OF { column_type | variable%TYPE |
table.column%TYPE } [NOT NULL] INDEX BY BINARY_INTEGER;
Слайд 23Процедуры и функции для работы с таблицами PL/SQL
Слайд 24Связанная переменная
переменная, которая объявляется во внешней среде, а затем используется для
динамической передачи параметра в программу PL/SQL.
:BV_Car := ‘Audi’;
Слайд 25Работа с данными в PL/SQL
Для извлечения данных из БД и их
изменения (DML) используются команды SQL. Управление транзакциями также осуществляется при помощи команд SQL - COMMIT и ROLLBACK.
Команды DDL и DCL явным образом использовать в PL/SQL нельзя. Для этой цели можно воспользоваться возможностями встроенного пакета DBMS_SQL.
Слайд 28Изменение данных в PL/SQL
Пример вставки данных в PL/SQL
Пример удаления данных
в PL/SQL
Слайд 30Циклы
простой цикл
цикл FOR
цикл WHILE
Слайд 34Курсоры
Курсор – это средство извлечения данных из базы данных Oracle. Курсоры
содержат определения столбцов и объектов (таблиц, представлений и т.п.) из которых будут извлекаться данные, а также набор критериев, определяющих какие именно строки должны быть выбраны
Слайд 35
Неявные курсоры - простой оператор SELECT ... INTO извлекает одну строку данных
непосредственно в переменные локальной программы. Явные курсоры - вы можете явно объявить курсов в разделе объявлений (локального блока или пакета).
Курсорные переменные - дополнительный уровень гибкости обеспечивают курсорные переменные (объявленные на основе типа REF CURSOR), которые позволяют передавать указатель на результирующее множество, полученное по запросу.
Курсорные выражения - выражения CURSOR преобразуют оператор SELECT в указатель (типа REF CURSOR) на результирующее множество и могут использоваться в сочетании с табличными функциями для повышения производительности приложений.
Слайд 36Неявные курсоры
создается всякий раз, когда в PL/SQL выполняется запрос, Oracle присваивает
ему системное имя
Атрибуты, которые можно применять для неявного курсора для определения результатов выполнения команды SQL: