PL/SQL введение IT4EVA

Содержание

Слайд 2

Procedural Language SQL Переменные и типы Управляющие структуры, такие как операторы

Procedural Language SQL

Переменные и типы
Управляющие структуры, такие как операторы и циклы

IF-THEN-ELSE
Процедуры и функции
Объектные типы и методы
Слайд 3

Procedural Language SQL

Procedural Language SQL

Слайд 4

PL/SQL:переменные, операторы, типы, блоки Анонимные блоки [Declare …объявления] Begin [1.. N

PL/SQL:переменные, операторы, типы, блоки

Анонимные блоки
[Declare
…объявления]
Begin
[1.. N исполняемых операторов]
[EXCEPTION
… операторы обработки

исключений…]
end;
/ -- символ завершения для запуска блока на компиляцию
Литералы – это значение, которое не представлено идентификатором, т. е. не имеет имени
Строковый литерал – всегда заключен в одинарные кавычки
'This is my sentence', '01-OCT-1986', 'hello!', NULL
Числовой литерал
415, 21.6, 3.141592654f, 7D, NULL
Логический литерал
TRUE, FALSE, NULL 
Слайд 5

PL/SQL: переменные, операторы, типы, блоки Операторы Оператор - Это элемент языка,

PL/SQL: переменные, операторы, типы, блоки

Операторы
Оператор - Это элемент языка, который задает

полное описание некоторого действия, которое необходимо выполнить. Каждый оператор представляет собой законченную фразу языка программирования и определяет некоторый этап обработки данных, например:
B := 5; Х := 10;
if B = X then DBMS_OUTPUT.put_line(‘Wrong result!’);
end if;
- Арифметические операторы: + - * / ** и т.д.
Операторы отношения (используются в логических выражениях): < > = != и т.д.
Выражение и списки (используются в операторах, объявлениях типов данных, объявлениях списков параметров, ссылках на переменные и таблицы): := ( ) , ‘ || и т.д.
Комментарии и метки:
Слайд 6

PL/SQL: переменные, операторы, типы, блоки

PL/SQL: переменные, операторы, типы, блоки

Слайд 7

PL/SQL: переменные, операторы, типы, блоки

PL/SQL: переменные, операторы, типы, блоки

Слайд 8

PL/SQL: переменные, операторы, типы, блоки Идентификаторы Идентифика́тор, ID (англ. data name,

PL/SQL: переменные, операторы, типы, блоки

Идентификаторы
Идентифика́тор, ID (англ. data name, identifier — опознаватель) — уникальный признак объекта, позволяющий отличать

его от других объектов, то есть идентифицировать.
По умолчанию идентификаторы(переменные, типы данных, объекты, пакеты) должны обладать следующими свойствами:
• Иметь длину до 30 символов
• Должны начинаться с буквы
• Могут включать в себя знаки доллара $, подчеркивания (_) и диеза (#)
• Не могут содержать никакие пробельные символы
Например: x, v1, v1_, v_Student, vID#
Если два идентификатора отличаются только регистром одной̆ или нескольких букв, то PL/SQL воспринимает их как один и тот же идентификатор. Например, следующие идентификаторы для PL/SQL идентичны:
lots_of_$MONEY$ LOTS_of_$MONEY$ Lots_of_$Money$
Слайд 9

PL/SQL: переменные, операторы, типы, блоки Переменные Имя_переменной тип [CONSTANT] [NOT NULL]

PL/SQL: переменные, операторы, типы, блоки

Переменные
Имя_переменной тип [CONSTANT] [NOT NULL] [:= значение];
vCustomerName(имя

переменной) char(100) (тип данных переменной);-- признак конца оператора
vCountStudents number; sDateBirth date
sTotalAmount number(9,2); cIdentContract constant varchar2(15) := ‘Licence’;
Значение NULL
Отсутствие значения отображается в Oracle при помощи ключевого слова NULL.
В предыдущем разделе было показано, что переменные почти всех типов данных PL/SQL могут находиться в неопределенном состоянии (исключением являются ассоциативные массивы, экземпляры которых ни при каких условиях не могут быть неопределенными). Обработка значений NULL любого типа данных может вызывать определенные сложности у программиста, при этом строковые значения заслуживают особого упоминания.
В Oracle SQL и PL/SQL строковое значение NULL обычно неотличимо от литерала, состоящего из нулевого количества символов ('' – две последовательные одинарные кавычки, между которыми нет никаких символов).
Например, следующее выражение будет вычислено как TRUE и в SQL, и в PL/SQL:
'' IS NULL
Значение NULL ведет себя так, как если бы типом данных по умолчанию для него являлся VARCHAR2, но сервер Oracle будет пытаться выполнить его неявное преобразование к типу данных, соответствующему выполняемой̆ операции. В некоторых ситуациях от вас может потребоваться явное приведение типов (с использованием такой̆ синтаксической̆ конструкции, как TO_NUMBER(NULL) или CAST(NULL AS NUMBER)).
Слайд 10

PL/SQL: переменные, операторы, типы, блоки Типы данных CHAR(n), VARCHAR2(n) - Строки

PL/SQL: переменные, операторы, типы, блоки

Типы данных
CHAR(n), VARCHAR2(n) - Строки переменной длины.


INTEGER - Целое число.
NUMBER(n) - Масштабируемое целое с плавающей точкой.
DATE - Дата/Время
BOOLEAN – логические выражения
ROWID, ROW - Идентификаторы записей в БД.
BLOB - Большие двоичные объекты.
CLOB - Большие строковые объекты.
BFILE - Указатели на большие внешние объекты.
Слайд 11

PL/SQL: переменные, операторы, типы, блоки Типы данных CHAR(n), VARCHAR2(n) - Строки

PL/SQL: переменные, операторы, типы, блоки

Типы данных
CHAR(n), VARCHAR2(n) - Строки переменной длины.


CHAR и NCHAR – это типы строк фиксированной длины,
а VARCHAR2 и NVARCHAR2 – типы строк переменной длины.
Рассмотрим объявление строки переменной длины, которая может вмещать до 2000 символов:
DECLARE
l_accident_description VARCHAR2(2000);
Слайд 12

PL/SQL: переменные, операторы, типы, блоки Типы данных INTEGER – целое число

PL/SQL: переменные, операторы, типы, блоки

Типы данных
INTEGER – целое число - целые

числа в диапазоне от -2,147,483,648 до 2,147,483,647 .
vIndex integer;
NUMBER(n) - целое с плавающей точкой.
Слайд 13

PL/SQL: переменные, операторы, типы, блоки Типы данных DATE - Дата/Время vBirthDate

PL/SQL: переменные, операторы, типы, блоки

Типы данных
DATE - Дата/Время
vBirthDate date;
date может

принимать значения от 1 января 4712 года до н.э. до 31 декабря 9999 года нашей эры.
BOOLEAN – логические выражения
vFirstRow boolean:= false;
Переменная этого типа может иметь лишь одно из трех значений: TRUE, FALSE и NULL.
Declare
vAmount1 number := 10;
vAmount2 number := 1;
vResult boolean;
Begin
if vAmount1= vAmount2 then
DBMS_OUTPUT.PUT_LINE(’FALSE!’);
vResult := false;
Else
vResult := true;
end if;
end;
Слайд 14

PL/SQL: переменные, операторы, типы, блоки Типы данных %ROWTYPE – курсорная переменная

PL/SQL: переменные, операторы, типы, блоки

Типы данных
%ROWTYPE – курсорная переменная
sRowEMP EMP%RowType;

- строка из таблицы EMP
Слайд 15

PL/SQL: переменные, операторы, типы, блоки Составные типы данных Таблицы TYPE TNumTable

PL/SQL: переменные, операторы, типы, блоки

Составные типы данных
Таблицы
TYPE TNumTable is Table of

number Index by BINARY_INTEGER;
Записи
TYPE tRecStudent is record (Name varchar2(240), StudentID number);
TYPE TTabStudents is Table of tRecStudent Index by BINARY_INTEGER;
vaStudents TTabStudents;
vaStudents(1).Name – значение столбца Name 1 строки таблицы
Слайд 16

PL/SQL: условные операторы Оператор IF-THEN-ELSE if then else – условие не

PL/SQL: условные операторы

Оператор IF-THEN-ELSE
if <некоторое условие справедливо> then
<действия над переменными>
else –

условие не выполнено
<действия над переменными>
end if;
if <некоторое условие справедливо> then
<действия над переменными>
Elsif <следующее условие справедливо> then
<действия над переменными>
else – условие не выполнено
<действия над переменными>
end if;
Слайд 17

PL/SQL: условные операторы Оператор IF-THEN-ELSE

PL/SQL: условные операторы

Оператор IF-THEN-ELSE

Слайд 18

PL/SQL: условные операторы Простой оператор CASE CASE employee_type WHEN 'S' THEN

PL/SQL: условные операторы

Простой оператор CASE
CASE employee_type
WHEN 'S' THEN award_salary_bonus(employee_id);


WHEN 'H' THEN award_hourly_bonus(employee_id);
WHEN 'C' THEN award_commissioned_bonus(employee_id);
ELSE
RAISE invalid_employee_type;
END CASE;
Слайд 19

PL/SQL: условные операторы Поисковый оператор CASE

PL/SQL: условные операторы

Поисковый оператор CASE

Слайд 20

PL/SQL: циклы Простой цикл LOOP

PL/SQL: циклы

Простой цикл LOOP

Слайд 21

PL/SQL: циклы цикл FOR For k in 1..vCount loop end loop;

PL/SQL: циклы

цикл FOR
For k in 1..vCount loop
<действия с переменными>
end

loop;
Слайд 22

PL/SQL: циклы цикл FOR For k in (select * from EMP

PL/SQL: циклы

цикл FOR
For k in (select * from EMP where

job = ‘MANAGER’) loop
<действия с переменными>
end loop;
Слайд 23

PL/SQL: циклы цикл WHILE

PL/SQL: циклы

цикл WHILE

Слайд 24

PL/SQL: курсоры SELECT name FROM emp; CURSOR curs_get_emp IS SELECT name

PL/SQL: курсоры

SELECT name FROM emp;
CURSOR curs_get_emp
IS
SELECT

name FROM emp;
Курсор – это средство извлечения данных из базы данных Oracle. Курсоры содержат определения столбцов и объектов (таблиц, представлений и т. п.), из которых будут извлекаться данные, а также набор критериев, определяющих, какие именно строки должны быть выбраны.
Слайд 25

PL/SQL: курсоры Cursor cEmployGrade is select e.empno emp_no , e.ename emp_name,

PL/SQL: курсоры

Cursor cEmployGrade
is
select e.empno emp_no ,
e.ename

emp_name,
e.sal emp_sal,
g.grade emp_grade
from emp e
inner join salgrade g on e.sal between g.losal and g.hisal
where e.deptno = p_dept_no
Слайд 26

PL/SQL: курсоры

PL/SQL: курсоры

Слайд 27

PL/SQL: курсоры

PL/SQL: курсоры

Слайд 28

PL/SQL: курсоры

PL/SQL: курсоры

Слайд 29

PL/SQL: курсоры

PL/SQL: курсоры

Слайд 30

PL/SQL: курсоры

PL/SQL: курсоры

Слайд 31

PL/SQL: курсоры

PL/SQL: курсоры

Слайд 32

PL/SQL: курсоры

PL/SQL: курсоры

Слайд 33

PL/SQL: курсоры

PL/SQL: курсоры

Слайд 34

PL/SQL: курсоры

PL/SQL: курсоры

Слайд 35

PL/SQL: курсоры

PL/SQL: курсоры

Слайд 36

PL/SQL: курсоры

PL/SQL: курсоры

Слайд 37

PL/SQL: курсоры

PL/SQL: курсоры

Слайд 38

PL/SQL: курсоры

PL/SQL: курсоры

Слайд 39

PL/SQL: DML/DDL язык манипулирования данными - DML (Data manipulation language) и

PL/SQL: DML/DDL

язык манипулирования данными - DML (Data manipulation language) и языком

определения данных - DDL (Data definition language).
CREATE TABLE t_tbl(fld1 VARCHAR2(128));
Слайд 40

PL/SQL: DML/DDL

PL/SQL: DML/DDL

Слайд 41

PL/SQL: процедуры, функции, пакеты

PL/SQL: процедуры, функции, пакеты

Слайд 42

PL/SQL: процедуры, функции, пакеты

PL/SQL: процедуры, функции, пакеты

Слайд 43

PL/SQL: процедуры, функции, пакеты

PL/SQL: процедуры, функции, пакеты

Слайд 44

PL/SQL: процедуры, функции, пакеты

PL/SQL: процедуры, функции, пакеты

Слайд 45

PL/SQL: процедуры, функции, пакеты

PL/SQL: процедуры, функции, пакеты

Слайд 46

PL/SQL: процедуры, функции, пакеты

PL/SQL: процедуры, функции, пакеты

Слайд 47

PL/SQL: процедуры, функции, пакеты

PL/SQL: процедуры, функции, пакеты

Слайд 48

PL/SQL: процедуры, функции, пакеты

PL/SQL: процедуры, функции, пакеты

Слайд 49

PL/SQL: процедуры, функции, пакеты

PL/SQL: процедуры, функции, пакеты

Слайд 50

PL/SQL: процедуры, функции, пакеты

PL/SQL: процедуры, функции, пакеты

Слайд 51

PL/SQL: Пакеты Спецификация пакета Вы можете объявлять элементы практически всех типов

PL/SQL: Пакеты

Спецификация пакета
Вы можете объявлять элементы практически всех типов данных: числа,

исключения, типы и коллекции, на уровне пакета (то есть не внутри конкретной̆ процедуры или функции пакета). Такие данные называются данными уровня пакета. При этом следует избегать объявления переменных в пакете, тогда как объявление констант вполне допустимо.
Вы можете объявлять практически любые виды структур данных, такие как коллекции, записи или тип REF CURSOR
Вы можете объявлять в спецификации пакета процедуры и функции, но указывать можно только заголовок программы (все, что находится выше ключевого слова IS или AS).
Если в спецификации пакета объявлены какие-то процедуры или функции, а также если курсорная переменная объявлена без SQL запроса, то необходимо написать тело пакета, в котором будут реализованы эти элементы кода.
В спецификацию пакета можно включить предложение AUTHID, которое будет определять, в соответствии с какими привилегиями разрешены любые ссылки на объекты: владельца пакета (AUTHID DEFINER) или пользователя, вызывающего пакет (AUTHID CURRENT_USER).
После оператора END в спецификации пакета можно поместить необязательную метку с именем пакета, например: END my_package;
Слайд 52

PL/SQL: Пакеты

PL/SQL: Пакеты

Слайд 53

PL/SQL: Пакеты Тело пакета Тело пакета может включать в себя раздел

PL/SQL: Пакеты

Тело пакета
Тело пакета может включать в себя раздел объявлений, исполняе?

мый раздел и раздел исключений. Раздел объявлений содержит полную реализацию всех курсоров и программ, определенных в спе? цификации, а также определение любых приватных элементов (не приведенных в спецификации). При наличии раздела инициализа? ции раздел объявлений может быть пуст.
Исполняемый раздел пакета принято называть разделом инициали? зации. Он может содержать код, который исполняется при созда? нии в сеансе экземпляра пакета.1
Раздел исключений обрабатывает любые исключения, порожден? ные в разделе инициализации. Он может присутствовать в конце пакета только в случае наличия раздела инициализации
Тело пакета может быть составлено следующими способами: оно может включать в себя только раздел объявлений, только испол? няемый раздел, исполняемый раздел и раздел исключений, а также раздел объявлений, исполняемый раздел и раздел исключений.
Не разрешается использовать предложение AUTHID в теле пакета, оно должно содержаться в спецификации. В теле пакета могут использо? ваться любые объекты, объявленные в спецификации этого пакета
Все правила и ограничения, существующие для объявления струк? тур данных уровня пакета, относятся как к спецификации, так и к телу пакета. Например, запрещено объявлять курсорные переменные.
После оператора END в спецификации пакета можно поместить не? обязательную метку с именем пакета, например: END my_package;
Слайд 54

PL/SQL: Пакеты

PL/SQL: Пакеты

Слайд 55

PL/SQL: Пакеты

PL/SQL: Пакеты

Слайд 56

PL/SQL: обработка исключений EXCEPTION WHEN NO_DATA_FOUND THEN . . .;

PL/SQL: обработка исключений

EXCEPTION
WHEN NO_DATA_FOUND THEN . . .;

Слайд 57

PL/SQL: обработка исключений - Встроенные функции обработки ошибок SQLCODE - Функция

PL/SQL: обработка исключений

- Встроенные функции обработки ошибок
SQLCODE - Функция SQLCODE возвращает

код ошибки для последнего (текущего) исключения в блоке. При отсутствии ошибок SQLCODE возвращает 0. Функция SQLCODE также возвращает 0 в случае, если она вызывается извне обработчика исключений.
SQLERRM - Функция SQLERRM возвращает сообщение об ошибке по ее коду. Если не передать SQLERRM код ошибки, то будет выдано сообщение об ошибке с кодом, возвращенным функцией̆ SQLCODE. Максимальная длина строки, возвращаемой̆ SQLERRM, составляет 512 байт (в некоторых более ранних версиях Oracle – всего 255 байт)
DBMS_UTILITY.FORMAT_ERROR_STACK - Эта встроенная функция, как и SQLERRM, возвращает полное сообщение, соответствующее текущей̆ ошибке (то есть значению, возвращенному функцией̆ SQLCODE). Как правило, следует вызывать эту функцию внутри обработчика ошибок для того, чтобы получить полное сообщение об ошибке.
DBMS_UTILITY.FORMAT_ERROR_BACKTRACE - Эта функция, появившаяся в версии Oracle Database 10g Release 1, возвращает форматированную строку, которая отображает стек программ и номера строк, ведущие к месту возникновения ошибки.
Слайд 58

PL/SQL: обработка исключений

PL/SQL: обработка исключений

Слайд 59

PL/SQL: обработка исключений

PL/SQL: обработка исключений

Слайд 60

PL/SQL: обработка исключений

PL/SQL: обработка исключений

Слайд 61

PL/SQL: обработка исключений

PL/SQL: обработка исключений

Слайд 62

PL/SQL: динамический SQL

PL/SQL: динамический SQL

Слайд 63

PL/SQL: динамический SQL

PL/SQL: динамический SQL

Слайд 64

PL/SQL: динамический SQL

PL/SQL: динамический SQL

Слайд 65

PL/SQL: динамический SQL

PL/SQL: динамический SQL

Слайд 66

PL/SQL: динамический SQL

PL/SQL: динамический SQL

Слайд 67

PL/SQL: пакетные операции DML и FORALL

PL/SQL: пакетные операции DML и FORALL

Слайд 68

PL/SQL: пакетные операции DML и FORALL

PL/SQL: пакетные операции DML и FORALL

Слайд 69

PL/SQL: пакетные операции DML и FORALL

PL/SQL: пакетные операции DML и FORALL

Слайд 70

PL/SQL: пакетные операции DML и FORALL

PL/SQL: пакетные операции DML и FORALL

Слайд 71

PL/SQL: пакетные операции DML и FORALL

PL/SQL: пакетные операции DML и FORALL

Слайд 72

PL/SQL: пакетные операции DML и FORALL

PL/SQL: пакетные операции DML и FORALL

Слайд 73

PL/SQL: пакетные операции DML и FORALL

PL/SQL: пакетные операции DML и FORALL

Слайд 74

PL/SQL: пакетные операции DML и FORALL

PL/SQL: пакетные операции DML и FORALL

Слайд 75

PL/SQL: пакетные операции DML и FORALL

PL/SQL: пакетные операции DML и FORALL

Слайд 76

PL/SQL: пакетные операции BULK COLLECT

PL/SQL: пакетные операции BULK COLLECT

Слайд 77

PL/SQL: пакетные операции BULK COLLECT

PL/SQL: пакетные операции BULK COLLECT