'

Язык программирования ORACLE PL/SQL

Понравилась презентация – покажи это...





Слайд 0

Язык программирования PL/SQL 1 Язык программирования ORACLE PL/SQL Учебные материалы ИВЦ АИС


Слайд 1

Язык программирования PL/SQL 2 Содержание курса. (1) Общий обзор PL/SQL Что такое PL/SQL и зачем он нужен Архитектура PL/SQL Основы PL/SQL


Слайд 2

Язык программирования PL/SQL 3 Содержание курса. (2) Взаимодействие с ORACLE Подпрограммы Пакеты Хранимые функции в SQL-операторах


Слайд 3

Язык программирования PL/SQL 4 Содержание курса. (3) PL/SQL в триггерах базы данных PL/SQL в SQL*Plus PL/SQL в ORACLE*Forms Стандартные пакеты Повторение. Ключевые компоненты PL/SQL


Слайд 4

Язык программирования PL/SQL 5 Общий обзор PL/SQL


Слайд 5

Язык программирования PL/SQL 6 Что такое PL/SQL ? процедурное расширение языка SQL полноценный процедурный язык не самостоятельный продукт технология, включающая механизм PL/SQL этот механизм встраивается в ядро RDBMS (СУБД) или в любое инструментальное средство Oracle


Слайд 6

Язык программирования PL/SQL 7 анонимный блок хранимую процедуру (функцию) в RDBMS процедуру (функцию) в хранимом пакете триггер базы данных библиотечную процедуру (функцию) триггер в инструментальном средстве ORACLE PL/SQL - программа может представлять собой:


Слайд 7

Язык программирования PL/SQL 8 История PL/SQL v 1.0. - Oracle 6 (SQL*Plus и SQL*Forms) v 1.1.-Developer/2000 v 2.0.-Oracle 7.0 и Developer/2000 r.2.1 v 2.1.-Oracle 7.1 v 2.2.-Oracle 7.2 v 2.3.-Oracle 7.3 v 3.0 - Oracle 8 !


Слайд 8

Язык программирования PL/SQL 9 Пример программы


Слайд 9

Язык программирования PL/SQL 10 DECLARE CURSOR curs IS SELECT A,B,C FROM SQRTS ORDER BY A; D NUMBER; Z NUMBER; X01 NUMBER; X02 NUMBER; STR VARCHAR2(55); BEGIN FOR K IN curs LOOP D := K.B*K.B - 4*K.A*K.C; Z := 2*K.A; STR := 'A='||TO_CHAR(K.A,'09.99')’|| ’, B='||TO_CHAR(K.B,'09.99')|| ', C='||TO_CHAR(K.C,'09.99')||' : '; X01 := (-K.B - SQRT(D))/Z; X02 := (-K.B + SQRT(D))/Z; INSERT INTO TEMP (NUM_COL1,NUM_COL2,CHAR_COL) VALUES (X01,X02,STR); COMMIT; END LOOP; EXCEPTION WHEN ZERO_DIVIDE THEN STR := STR||'Это не квадратное уравнение'; INSERT INTO TEMP (CHAR_COL) VALUES (STR); WHEN VALUE_ERROR THEN STR := STR||'Действительных корней нет'; INSERT INTO TEMP (CHAR_COL) VALUES (STR); END;


Слайд 10

Язык программирования PL/SQL 11 Блочная структура [DECLARE <описания>] BEGIN <тело программы> [EXCEPTION <обработчик исключений>] END;


Слайд 11

Язык программирования PL/SQL 12 Переменные и константы Объявление переменных: X01 NUMBER(9); X02 NUMBER DEFAULT 5.1; STR VARCHAR(55); PI CONSTANT REAL := 3.14158265;


Слайд 12

Язык программирования PL/SQL 13 Переменные и константы 2 способа присвоить значение переменной: 1) x02 := x01 * 10; 2) SELECT a*10.3 INTO x02 FROM sqrts WHERE b = 0;


Слайд 13

Язык программирования PL/SQL 14 Атрибуты переменных %TYPE %ROWTYPE DECLARE x01 NUMBER(9); x02 x01%TYPE; str scott.temp.char_col%TYPE; CURSOR c1 IS SELECT a,b,c FROM sqrts; c_emp c1%ROWTYPE; ...


Слайд 14

Язык программирования PL/SQL 15 Управляющие структуры IF-THEN-ELSE; FOR-LOOP; WHILE-LOOP; EXIT-WHEN; GOTO


Слайд 15

Язык программирования PL/SQL 16 Понятие курсора ORACLE использует рабочую приватную область для выполнения SQL - оператора Курсор - механизм, позволяющий манипулировать информацией из этой области


Слайд 16

Язык программирования PL/SQL 17 Понятие курсора CLOSE


Слайд 17

Язык программирования PL/SQL 18 Обработка ошибок PL/SQL позволяет легко обнаруживать и обрабатывать как предопределенные, так и определенные пользователем ошибочные условия, которые называются исключениями


Слайд 18

Язык программирования PL/SQL 19 Обработка ошибок Исключения: предопределенные (возбуждаются неявно) определенные пользователем (должны быть определены явно и возбуждаются оператором RAISE)


Слайд 19

Язык программирования PL/SQL 20 Модульность PL/SQL 2 типа подпрограмм PL/SQL: процедуры функции возможность объединения в пакет


Слайд 20

Язык программирования PL/SQL 21 Модульность PL/SQL PROCEDURE имя_процедуры (параметр1 ТИП, параметр2 ТИП...) IS <описания> BEGIN <тело программы> [EXCEPTION <обработчик исключений>] END;


Слайд 21

Язык программирования PL/SQL 22 Архитектура PL/SQL В ORACLE - server:


Слайд 22

Язык программирования PL/SQL 23 Архитектура PL/SQL В ORACLE - tools:


Слайд 23

Язык программирования PL/SQL 24 Основы PL/SQL


Слайд 24

Язык программирования PL/SQL 25 Набор символов В PL/SQL можно использовать: буквы A .. Z, a .. z цифры 0 .. 9 табуляцию, пробел, символ возврата каретки символы ( ) + - * / < > = ! ~ ; : . ‘ @ % , “ # $ ^ & _ | { } ? [ ] в символьных строках допускается использование кириллицы (русские буквы)


Слайд 25

Язык программирования PL/SQL 26 Лексические единицы Разделители: простые составные Идентификаторы Литералы Комментарии


Слайд 26

Язык программирования PL/SQL 27 Зарезервированные слова PL/SQL: ABORT COLAUTH ELSE LEVEL PRIVATE SQLERRM ACCEPT COLUMNS ELSIF LIKE PROCEDURE START ACCESS COMMIT END LIMITED PUBLIC STATEMENT ADD COMPRESS ENTRY LOOP RAISE STDDEV ALL CONNECT EXCEPTION MAX RANGE SUBTYPE ALTER CONSTANT EXCEPTION_INIT MIN REAL SUM AND COUNT EXISTS MINUS RECORD TABAUTH ANY CRASH EXIT MLSLABEL RELEASE TABLE ARRAY CREATE FALSE MOD REM TABLES ARRAYLEN CURRENT FETCH NATURAL RENAME TASK AS CURSOR FLOAT NEW RESOURCE TERMINATE ASC CURRVAL FOR NEXTVAL RETURN THEN ASSERT DATABASE FORM NOCOMPRESS REVERSE TO ASSIGN DATA_BASE FROM NOT REVOKE TRUE AT DATE FUNCTION NULL ROLLBACK TYPE AUTHORIZATION DBA GENERIC NUMBER ROWID UNION AVG DEBUGOFF GOTO NUMBER_BASE ROWLABEL UNIQUE BASE_TABLE DEBUGON GRANT OF ROWNUM UPDATE BEGIN DECLARE GROUP ON ROWTYPE USE BETWEEN DECIMAL HAVING OPEN RUN VALUES BINARY_INTEGER DEFAULT IDENTIFIED OPTION SAVEPOINT VARCHAR BODY DEFINITION IF OR SCHEMA VARCHAR2 BOOLEAN DELAY IN ORDER SELECT VARIANCE BY DELETE INDEX OTHERS SEPARATE VIEW CASE DELTA INDEXES OUT SET VIEWS CHAR DESC INDICATOR PACKAGE SIZE WHEN CHAR_BASE DIGITS INSERT PARTITION SMALLINT WHERE CHECK DISPOSE INTEGER PCTFREE SPACE WHILE CLOSE DISTINCT INTERSECT POSITIVE SQL WITH CLUSTER DO INTO PRAGMA SQLCODE WORK CLUSTERS DROP IS PRIOR SQLERRM XOR (~ 200 слов)


Слайд 27

Язык программирования PL/SQL 28 Комментарии -- это однострочный комментарий /* это многострочный комментарий */ Нельзя вкладывать комментарии друг в друга !


Слайд 28

Язык программирования PL/SQL 29 Типы данных специфицируют формат хранения констант и переменных


Слайд 29

Язык программирования PL/SQL 30 Предопределенные типы данных


Слайд 30

Язык программирования PL/SQL 31 Категория NUMBER


Слайд 31

Язык программирования PL/SQL 32 Категория CHARACTER


Слайд 32

Язык программирования PL/SQL 33 Типы данных Тип DATE: от 01 января 14712 г. до н.э. до 31 декабря 314712 г. н.э. Тип BOOLEAN: TRUE FALSE NULL


Слайд 33

Язык программирования PL/SQL 34 Типы данных Подтипы Стандартные: SUBTYPE POSITIVE IS BINARY_INTEGER RANGE 1..2147483647; Скалярные подтипы пользователя: SUBTYPE My_Typ IS BINARY_INTEGER RANGE 1..50; SUBTYPE My_Typ IS NUMBER(12,5);


Слайд 34

Язык программирования PL/SQL 35 Преобразование типов данных


Слайд 35

Язык программирования PL/SQL 36 Неявные преобразования типов позволяет использовать литералы, переменные и параметры одного типа там, где ожидается другой


Слайд 36

Язык программирования PL/SQL 37 Объявления переменных, констант, курсоров


Слайд 37

Язык программирования PL/SQL 38 программа хранит значения в переменных и константах; значения констант не могут изменяться; Все переменные, константы и курсоры должны быть объявлены в декларативной части блока; при объявлении можно присвоить начальное значение и определить ограничение NOT NULL. Переменные, константы, курсоры


Слайд 38

Язык программирования PL/SQL 39 Примеры: birthdate DATE; emp_count SMALLINT := 0; sal_ma NUMBER(12.2) DEFAULT 1200.00; acct_id VARCHAR2(5) NOT NULL:='AP001'; pi CONSTANT REAL := 3.14159; radius REAL := 1; area REAL := pi*radius**2;


Слайд 39

Язык программирования PL/SQL 40 Атрибут %TYPE позволяет ссылаться на: тип данных ранее объявленной переменной; существующий столбец базы данных. credit REAL(7,2); debit credit%TYPE; my_dname scott.dept.dname%TYPE; balance NUMBER(7,2); minimum_balance balance%TYPE:=10.00;


Слайд 40

Язык программирования PL/SQL 41 Упражнения № 1-1 № 1-2 № 1-3 № 1-4


Слайд 41

Язык программирования PL/SQL 42 Атрибут %ROWTYPE. определяет тип записи, представляющей строку в таблице, представлении или в курсоре: DECLARE emp_rec emp%ROWTYPE; CURSOR c1 IS SELECT deptno, dname, loc FROM dept; dept_rec c1%ROWTYPE; ...


Слайд 42

Язык программирования PL/SQL 43 DECLARE dept_rec1 dept%ROWTYPE; dept_rec2 dept%ROWTYPE; TYPE DeptRecTyp IS RECORD (deptno NUMBER(2) NOT NULL := 20, dname dept.dname%TYPE, loc dept.loc%TYPE); dept_rec3 DeptRecTyp; CURSOR c1 IS SELECT deptno, dname, loc FROM dept; dept_rec4 c1%ROWTYPE; BEGIN SELECT deptno, dname, loc INTO dept_rec1 FROM dept WHERE rownum=1; OPEN c1; FETCH c1 INTO dept_rec3; CLOSE c1; dept_rec2 := dept_rec1; ... END;


Слайд 43

Язык программирования PL/SQL 44 DECLARE CURSOR my_cursor IS SELECT sal+NVL(comm,0) wages, ename FROM emp; my_rec my_cursor%ROWTYPE; BEGIN OPEN my_cursor; LOOP FETCH my_cursor INTO my_rec; EXIT WHEN my_cursor%NOTFOUND; IF my_rec.wages > 2000 THEN INSERT INTO temp VALUES (null,my_rec.wages,my_rec.ename); END IF; END LOOP; CLOSE my_cursor; END;


Слайд 44

Язык программирования PL/SQL 45 Составной тип RECORD. %ROWTYPE фактически объявляет переменную типа RECORD; можно объявить переменную типа RECORD явно, например:


Слайд 45

Язык программирования PL/SQL 46 Составной тип RECORD. DECLARE TYPE Address IS RECORD (town VARCHAR2(40), street VARCHAR2(40, post_box NUMBER(12)); TYPE DeptRecTyp IS RECORD (deptno NUMBER(2) NOT NULL := 20, dname dept.dname%TYPE, loc dept.loc%TYPE, adr Address ); dept_rec3 DeptRecTyp; ...


Слайд 46

Язык программирования PL/SQL 47 Составной тип RECORD. Для обращения к элементам переменной типа RECORD используются квалифицированные ссылки, например: dept_rec3.adr.town := ‘МОСКВА’;


Слайд 47

Язык программирования PL/SQL 48 Область действия переменных Внешняя переменная x:


Слайд 48

Язык программирования PL/SQL 49 Область действия переменных Внутренняя переменная x:


Слайд 49

Язык программирования PL/SQL 50 Порядок выполнения операторов **, NOT +, - *, / +, -, || =, !=, <, >, <=, >=, IS NULL, LIKE, BETWEEN, IN AND OR скобки изменяют порядок вычисления выражений


Слайд 50

Язык программирования PL/SQL 51 Управляющие структуры


Слайд 51

Язык программирования PL/SQL 52 Логические выражения и операторы сравнения В PL/SQL логическая (булевская)переменная может принимать одно из трех значений: TRUE FALSE NULL


Слайд 52

Язык программирования PL/SQL 53 Логические выражения и операторы сравнения FALSE AND NULL = FALSE TRUE OR NULL = TRUE NOT NULL = NULL Булевскому значению всегда равен результат операции сравнения. Кроме обычных операторов сравнения используются LIKE, BEETWEN, IN, IS NULL


Слайд 53

Язык программирования PL/SQL 54 Условные операторы IF условие THEN <последовательность операторов>; END IF; IF-THEN:


Слайд 54

Язык программирования PL/SQL 55 Условные операторы IF условие THEN <последовательность операторов 1>; ELSE <последовательность операторов 2>; END IF; IF-THEN-ELSE:


Слайд 55

Язык программирования PL/SQL 56 Условные операторы IF условие 1 THEN <последовательность операторов 1>; ELSIF условие 2 THEN <последовательность операторов 2>; ELSE <последовательность операторов 3>; END IF; IF-THEN-ELSIF:


Слайд 56

Язык программирования PL/SQL 57 Бесконечный цикл: LOOP <последовательность операторов>; END LOOP; Циклы


Слайд 57

Язык программирования PL/SQL 58 Цикл с предусловием: WHILE <условие> LOOP <последовательность операторов>; END LOOP; Циклы


Слайд 58

Язык программирования PL/SQL 59 Циклы Цикл FOR: FOR <счетчик> IN [REVERSE] <начало>..<конец> LOOP <последовательность операторов>; END LOOP;


Слайд 59

Язык программирования PL/SQL 60 Цикл FOR с курсором DECLARE CURSOR <курсор>[(список параметров)] IS SELECT ... ; BEGIN ... FOR <запись> IN <курсор>[(параметры)] LOOP ... END LOOP; END;


Слайд 60

Язык программирования PL/SQL 61 Операторы GOTO и NULL BEGIN ... GOTO insert_row; ... <<insert_row>> INSERT INTO emp VALUES ... ... END;


Слайд 61

Язык программирования PL/SQL 62 Упражнения № 4-1 № 4-2 № 4-3


Слайд 62

Язык программирования PL/SQL 63 Встроенные функции Все встроенные (built-in) функции, используемые в SQL, за исключением DECODE, доступны также в PL/SQL Функции SQLCODE и SQLERRM доступны только в PL/SQL.


Слайд 63

Язык программирования PL/SQL 64 Тип данных RECORD 2 способа объявления переменной типа RECORD: Использование атрибута %ROWTYPE имя_переменной{курсор%ROWTYPE| таблица%ROWTYPE| схема.таблица%ROWTYPE };


Слайд 64

Язык программирования PL/SQL 65 Тип данных RECORD TYPE имя_типа IS RECORD (имя_поля1 {тип_поля | переменная%TYPE | таблица.столбец%TYPE | таблица%ROWTYPE} [NOT NULL],...); имя_переменной имя_типа; Объявление собственного типа RECORD:


Слайд 65

Язык программирования PL/SQL 66 Новый тип данных PL/SQL - Tables (отличие от v.1.0) Что это за тип ? Объявление таблиц PL/SQL Обращение к таблицам PL/SQL Извлечение строк из БД в таблицу PL/SQL и из таблицы PL/SQL в БД Удаление данных из таблицы PL/SQL


Слайд 66

Язык программирования PL/SQL 67 Тип данных PL/SQL Table Составной тип данных, моделирующий таблицы БД Состоит из одного столбца и одного первичного ключа (индекса) Столбец может принадлежать любому скалярному типу (для версий ниже 2.3) Тип первичного ключа всегда BINARY_INTEGER или один из его подтипов Появился в PL/SQL версии 2.0


Слайд 67

Язык программирования PL/SQL 68 Объявление таблиц PL/SQL Таблицы PL/SQL объявляются за два шага:- -- Объявить тип -- “Таблица PL/SQL”: TYPE имя_типа IS TABLE OF {тип_столбца|переменная%TYPE| таблица.столбец%TYPE } [NOT NULL] INDEX BY BINARY_INTEGER; -- Объявить таблицы PL/SQL -- этого типа: имя_переменной имя_типа;


Слайд 68

Язык программирования PL/SQL 69 Объявление таблиц PL/SQL. Пример DECLARE TYPE EnameTabTyp IS TABLE OF CHAR(10) INDEX BY BINARY_INTEGER; ename_tab EnameTabTyp;


Слайд 69

Язык программирования PL/SQL 70 Обращение к таблицам PL/SQL подобно обращению к элементу массива: имя_таблицы_plsql(знач_первичн_ключа) присвоение значения строке таблицы: имя_таблицы_plsql(знач_первичн_ключа) := выражение_plsql; ename_tab(3) ename_tab(-5) sal_tab(5) := salary + increase;


Слайд 70

Язык программирования PL/SQL 71 Извлечение строк из БД в таблицу PL/SQL удобно использовать цикл FOR с курсором


Слайд 71

Язык программирования PL/SQL 72 DECLARE TYPE EnameTabTyp IS TABLE OF emp.ename%TYPE INDEX BY BINARY_INTEGER; TYPE SalTabTyp IS TABLE OF emp.sal%TYPE INDEX BY BINARY_INTEGER; ename_tab EnameTabTyp; sal_tab SalTabTyp; i BINARY_INTEGER := 0; ... BEGIN -- загрузить имена и оклады сотрудников -- в таблицы PL/SQL FOR emprec IN (SELECT ename, sal FROM emp) LOOP i := i + 1; ename_tab(i) := emprec.ename; sal_tab(i) := emprec.sal; END LOOP; -- обработать таблицы process_sals(ename_tab, sal_tab); ... END;


Слайд 72

Язык программирования PL/SQL 73 Удаление данных из таблицы PL/SQL Присвоение пустой таблицы PL/SQL такого же типа (для версий 2.3 и выше) - функция DELETE


Слайд 73

Язык программирования PL/SQL 74 Усовершенствования PL/SQL Table для версии 2.3 В качестве типа столбца таблицы PL/SQL теперь допускается использование составного типа RECORD Специально для работы с PL/SQL - таблицами в версию 2.3 включены новые функции.


Слайд 74

Язык программирования PL/SQL 75 Функции v2.3 для PL/SQL Table: COUNT DELETE EXIST FIRST LAST NEXT PRIOR


Слайд 75

Язык программирования PL/SQL 76 Функции v2.3 для PL/SQL Table: COUNT DELETE EXIST FIRST LAST NEXT PRIOR Найти количество определенных в настоящий момент элементов : total_rows := emp_table.COUNT;


Слайд 76

Язык программирования PL/SQL 77 Функции v2.3 для PL/SQL Table: COUNT DELETE EXISTS FIRST LAST NEXT PRIOR Удалить один или больше элементов из PL/SQL - таблицы: names_tab.DELETE; -- все строки names_tab.DELETE(85); -- 85-ю стр -- строки от -120 до 5: names_tab.DELETE(-120,5);


Слайд 77

Язык программирования PL/SQL 78 Функции v2.3 для PL/SQL Table: COUNT DELETE EXISTS FIRST LAST NEXT PRIOR Определить, существует ли элемент таблицы с заданным значением индекса: IF emp_table.EXISTS(5) THEN ...


Слайд 78

Язык программирования PL/SQL 79 Функции v2.3 для PL/SQL Table: COUNT DELETE EXIST FIRST LAST NEXT PRIOR Найти наименьшее значение индекса,для которого определен элемент таблицы : first_row := eployee_table.FIRST;


Слайд 79

Язык программирования PL/SQL 80 Функции v2.3 для PL/SQL Table: COUNT DELETE EXIST FIRST LAST NEXT PRIOR Найти наибольшее значение индекса,для которого определен элемент таблицы : last_row := eployee_table.LAST;


Слайд 80

Язык программирования PL/SQL 81 Функции v2.3 для PL/SQL Table: COUNT DELETE EXIST FIRST LAST NEXT PRIOR Найти индекс следующего элемента: next_index := eployee_table.NEXT(curr_index);


Слайд 81

Язык программирования PL/SQL 82 Функции v2.3 для PL/SQL Table: COUNT DELETE EXIST FIRST LAST NEXT PRIOR Найти индекс предыдущего элемента: prev_index := employee_table.PRIOR(curr_index);


Слайд 82

Язык программирования PL/SQL 83 Упражнения №№ 3-2, 3-3, 3-4 № 3-1


Слайд 83

Язык программирования PL/SQL 84 Взаимодействие с ORACLE


Слайд 84

Язык программирования PL/SQL 85 Поддержка SQL


Слайд 85

Язык программирования PL/SQL 86 Управление курсором Объявление курсора OPEN - Открыть курсор (без параметров или с параметрами) FETCH - Извлечь данные CLOSE - Закрыть курсор FOR UPDATE - Извлечь данные для их изменения


Слайд 86

Язык программирования PL/SQL 87 Атрибуты курсора %NOTFOUND %FOUND %ISOPEN %ROWCOUNT


Слайд 87

Язык программирования PL/SQL 88 Объявление курсора БЕЗ ПАРАМЕТРОВ DECLARE CURSOR имя_курсора IS SELECT ... FROM ... WHERE ... ; ... С ПАРАМЕТРАМИ CURSOR имя_курсора(param ТИП) IS SELECT ... FROM ... WHERE col>parаm ;


Слайд 88

Язык программирования PL/SQL 89 Открытие курсора БЕЗ ПАРАМЕТРОВ: OPEN имя_курсора; С ПАРАМЕТРАМИ: OPEN имя_курсора(значения парам.);


Слайд 89

Язык программирования PL/SQL 90 Извлечение данных из курсора OPEN имя_курсора; LOOP FETCH имя_курсора INTO приемник; EXIT WHEN имя_курсора%NOTFOUND; ... END LOOP; CLOSE имя_курсора;


Слайд 90

Язык программирования PL/SQL 91 Изменение выбранных из курсора строк DECLARE CURSOR c1 IS SELECT empno, sal FROM emp WHERE job = 'SALESMAN' AND comm > sal FOR UPDATE; ... BEGIN FOR rec IN c1 LOOP ... UPDATE emp SET sal = new_sal WHERE CURRENT OF c1; END LOOP; ... END;


Слайд 91

Язык программирования PL/SQL 92 Обработка исключений


Слайд 92

Язык программирования PL/SQL 93 Внутренние исключения с предопределенными именами Внутренние исключения, не имеющие предопределенного имени Определенные пользователем исключения Пользовательский код ошибки Возбуждение исключения Порядок распространения исключения Вторичное возбуждение исключения Возбуждение исключения в декларативном разделе Возбуждение исключения при обработке исключений Использование SQLCODE и SQLERRM Необработанные исключения


Слайд 93

Язык программирования PL/SQL 94 Обработка исключений Исключение (EXCEPTION) в PL/SQL - это условие, приведшее к ошибке или предупреждению. Исключения могут быть внутренними или определяться пользователем.


Слайд 94

Язык программирования PL/SQL 95 Внутренние исключения с предопределенными именами


Слайд 95

Язык программирования PL/SQL 96 Внутренние исключения, не имеющие предопределенного имени DECLARE имя_исключения EXCEPTION; PRAGMA EXCEPTION_INIT (имя_исключения, код_ошибки_ORACLE); ...


Слайд 96

Язык программирования PL/SQL 97 -- Пример: включить собственную обработку ошибки -- с кодом -1013 (недостаточно привилегий) -- в PL/SQL - блок: DECLARE insufficient_privileges EXCEPTION; PRAGMA EXCEPTION_INIT( insufficient_privileges, -1031); BEGIN ... EXCEPTION WHEN insufficient_privileges THEN <действия по обработке ошибки ORA-1031> WHEN OTHERS THEN <действия по обработке всех неописанных исключений> END;


Слайд 97

Язык программирования PL/SQL 98 Исключения, определенные пользователем DECLARE имя_исключения EXCEPTION; ... BEGIN ... IF ... THEN RAISE имя_исключения; END IF; EXCEPTION WHEN имя_исключения THEN ... END;


Слайд 98

Язык программирования PL/SQL 99 Пользовательский код ошибки Используйте встроенную процедуру PROCEDURE RAISE_APPLICATION_ERROR(код_ошибки IN NUMBER, строка_сообщения IN VARCHAR2) код ошибки - от -20000 до -20999,


Слайд 99

Язык программирования PL/SQL 100 Пользовательский код ошибки CREATE TRIGGER SAVE_PRESIDENT BEFORE DELETE ON EMP FOR EACH ROW WHEN (OLD.JOB='ПРЕЗИДЕНТ') BEGIN RAISE_APPLICATION_ERROR(-20005, 'НЕ ТАК ПРОСТО УВОЛИТЬ ПРЕЗИДЕНТА'); END;


Слайд 100

Язык программирования PL/SQL 101 Подпрограммы Общие правила написания процедур и функций Где используются подпрограммы PL/SQL Параметры PL/SQL-подпрограмм Создание хранимых подпрограмм


Слайд 101

Язык программирования PL/SQL 102 Подпрограммы поименованные PL/SQL - блоки, могут получать и возвращать параметры: процедуры функции имеют разделы: DECLARATION (декларативный) EXECUTABLE (выполняемый) EXEPTION-HANDLING (обработчик исключений)


Слайд 102

Язык программирования PL/SQL 103 Процедуры: PROCEDURE имя [(параметр [,параметр, ...])] IS [локальные объявления] BEGIN исполняемые предложения [EXCEPTION обработчики исключений] END [имя];


Слайд 103

Язык программирования PL/SQL 104 Функции: FUNCTION имя [(параметр [,параметр, ...])] RETURN тип_возвращаемого_ значения IS [локальные объявления] BEGIN исполняемые предложения [EXCEPTION обработчики исключений] END [имя];


Слайд 104

Язык программирования PL/SQL 105 Параметры PL/SQL - подпрограмм имя_переменной [IN|OUT|IN OUT] тип_данных [{:=|DEFAULT} значение]; Спецификатор типа данных в заголовке процедуры не может иметь ограничений


Слайд 105

Язык программирования PL/SQL 106 Создание хранимых подпрограмм Чтобы создать хранимую подпрограмму, достаточно перед текстом подпрограммы вставить команду CREATE или CREATE OR REPLACE, и выполнить полученный скрипт в среде SQL*Plus


Слайд 106

Язык программирования PL/SQL 107 Пакеты Пакет - это собрание различных PL/SQL - объектов, среди которых могут быть: Курсоры Переменные Константы Имена исключений Описания типов данных (записей и таблиц PL/SQL) Процедуры Функции


Слайд 107

Язык программирования PL/SQL 108 Преимущества пакетов: Принцип перегрузки (возможность создания в одном пакете нескольких подпрограмм с одинаковыми именами, но разным количеством и/или типами параметров). Сохранение значений пакетных переменных на протяжении сессии


Слайд 108

Язык программирования PL/SQL 109 Структура пакета Спецификация содержит определения всех элементов пакета, на которые можно ссылаться извне пакета: PACKAGE имя_пакета IS [объявления переменных и типов] [спецификации курсоров] [спецификации модулей] END [имя_пакета];


Слайд 109

Язык программирования PL/SQL 110 Структура пакета Тело пакета содержит программный код всех элементов пакета: PACKAGE BODY имя_пакета IS [объявления переменных и типов] [спецификации и операторы SELECT курсоров] [спецификации и текст модулей] [BEGIN выполняемые операторы] [EXCEPTION обработчики исключений] END [имя_пакета]


Слайд 110

Язык программирования PL/SQL 111 Обращение к элементам пакета Для обращения к элементам пакета используются квалифицированные имена: sp_timer.show_elapsed system.sp_timer.show_elapsed


Слайд 111

Язык программирования PL/SQL 112 Хранимые PL/SQL - функции в SQL-операторах “Одиночные” функции в SQL-операторах Пакетные функции в SQL-операторах. Прагма RESTRICT_REFERENCES PRAGMA RESTRICT_REFERENCES (имя_функции, WNDS [,WNPS] [,RNDS] [,RNPS])


Слайд 112

Язык программирования PL/SQL 113 Пакетные функции в SQL-операторах. Пример PACKAGE my_package IS FUNCTION my_func( param_1 IN VARCHAR2) RETURN NUMBER; PRAGMA RESTRICT_REFERENCES (my_func, WNDS, RNDS); END my_package;


Слайд 113

Язык программирования PL/SQL 114 Использование PL/SQL в триггерах базы данных Параметры триггера Доступ к значениям столбцов Условные предикаты Обработка ошибок в триггерах Ограничения


Слайд 114

Язык программирования PL/SQL 115 Синтаксис создания триггера CREATE [OR REPLACE] TRIGGER имя_триггера {BEFORE|AFTER} {[DELETE][OR INSERT][OR UPDATE]} ON имя_таблицы [REFERENCING {new|old} AS псевдоним] [FOR EACH ROW [WHEN (условие) ]] DECLARE <объявления> BEGIN <блок PL/SQL> END;


Слайд 115

Язык программирования PL/SQL 116 Включение/выключение триггеров ALTER TRIGGER имя_триггера {DISABLE | ENABLE}; ALTER TABLE имя_таблицы {DISABLE | ENABLE} ALL TRIGGERS;


Слайд 116

Язык программирования PL/SQL 117 Параметры триггера BEFORE / AFTER DELETE, INSERT, UPDATE FOR EACH ROW WHEN - (для FOR EACH ROW) REFERENCING


Слайд 117

Язык программирования PL/SQL 118 Доступ к значениям столбцов корреляционные имена: :NEW.имя_столбца - новое значение; :OLD.имя_столбца - старое значение.


Слайд 118

Язык программирования PL/SQL 119 Условные предикаты INSERTING DELETING UPDATING


Слайд 119

Язык программирования PL/SQL 120 12 типов триггеров только команды DML ограничено использование LONG и LONG RAW триггер AFTER … FOR EACH ROW при создании журнала моментальных копий при откате не восстанавливаются значения переменных пакета; Не пишите триггеров, зависящих от порядка обработки строк командой SQL; (Измененная таблица). (Защищенная таблица). Обработка ошибок в триггерах Ограничения


×

HTML:





Ссылка: