1.22k likes | 1.96k Views
Язык программирования ORACLE PL/SQL. Учебные материалы ИВЦ АИС. Содержание курса. (1). Общий обзор PL/SQL Что такое PL/SQL и зачем он нужен Архитектура PL/SQL Основы PL/SQL. Содержание курса. (2). Взаимодействие с ORACLE Подпрограммы Пакеты Хранимые функции в SQL- операторах.
E N D
Язык программирования ORACLE PL/SQL Учебные материалы ИВЦ АИС Язык программирования PL/SQL
Содержание курса. (1) • Общий обзор PL/SQL • Что такое PL/SQL и зачем он нужен • Архитектура PL/SQL • Основы PL/SQL Язык программирования PL/SQL
Содержание курса. (2) • Взаимодействие с ORACLE • Подпрограммы • Пакеты • Хранимые функции в SQL-операторах Язык программирования PL/SQL
Содержание курса. (3) • PL/SQL в триггерах базы данных • PL/SQL в SQL*Plus • PL/SQL в ORACLE*Forms • Стандартные пакеты • Повторение. Ключевые компоненты PL/SQL Язык программирования PL/SQL
Общий обзор PL/SQL Язык программирования PL/SQL
Что такое PL/SQL ? • процедурное расширение языка SQL • полноценный процедурный язык • не самостоятельный продукт • технология, включающая механизм PL/SQL • этот механизм встраивается в ядро RDBMS (СУБД) или в любое инструментальное средство Oracle Язык программирования PL/SQL
PL/SQL - программа может представлять собой: • анонимный блок • хранимую процедуру (функцию) в RDBMS • процедуру (функцию) в хранимом пакете • триггер базы данных • библиотечную процедуру (функцию) • триггер в инструментальном средстве ORACLE Язык программирования PL/SQL
История 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 ! Язык программирования PL/SQL
Пример программы Язык программирования PL/SQL
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; Язык программирования PL/SQL
Блочная структура [DECLARE <описания>] BEGIN <тело программы> [EXCEPTION <обработчик исключений>] END; Язык программирования PL/SQL
Переменные и константы • Объявление переменных: X01 NUMBER(9); X02 NUMBER DEFAULT 5.1; STR VARCHAR(55); PI CONSTANT REAL := 3.14158265; Язык программирования PL/SQL
Переменные и константы • 2 способа присвоить значение переменной: 1) x02 := x01 * 10; 2) SELECT a*10.3 INTO x02 FROM sqrts WHERE b = 0; Язык программирования PL/SQL
Атрибуты переменных • %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; ... Язык программирования PL/SQL
Управляющие структуры • IF-THEN-ELSE; • FOR-LOOP; • WHILE-LOOP; • EXIT-WHEN; • GOTO Язык программирования PL/SQL
ORACLE использует рабочую приватную область для выполнения SQL - оператора Курсор - механизм, позволяющий манипулировать информацией из этой области Понятие курсора Язык программирования PL/SQL
СУБД OPEN FETCH INTO ПРОГРАММНЫЕ ПЕРЕМЕННЫЕ 1254 КЛЕРК КУЗНЕЦОВ 4567 МЕНЕДЖЕР СИДОРОВ 7643 ПРОДАВЕЦ ИВАНОВ 6543 ДИРЕКТОР ПЕТРОВ Понятие курсора CLOSE Язык программирования PL/SQL
Обработка ошибок PL/SQL позволяет легко обнаруживать и обрабатывать как предопределенные, так и определенные пользователем ошибочные условия, которые называются исключениями Язык программирования PL/SQL
Обработка ошибок • Исключения: • предопределенные (возбуждаются неявно) • определенные пользователем (должны быть определены явно и возбуждаются оператором RAISE) Язык программирования PL/SQL
Модульность PL/SQL • 2 типа подпрограмм PL/SQL: • процедуры • функции • возможность объединения в пакет Язык программирования PL/SQL
Модульность PL/SQL PROCEDURE имя_процедуры (параметр1 ТИП, параметр2 ТИП...) IS <описания> BEGIN <тело программы> [EXCEPTION <обработчик исключений>] END; Язык программирования PL/SQL
PL/SQL Engine Процедуры Обработчик процедур PL/SQL PL/SQL БЛОК PL/SQL БЛОК SQL Архитектура PL/SQL • В ORACLE - server: Язык программирования PL/SQL
ORACLE - сервер Host - программа или инструмент. средство ORACLE PL/SQL Engine Процедуры Обработчик процедур PL/SQL Анонимный PL/SQL БЛОК Анонимный PL/SQL БЛОК SQL Обработчик SQL - операторов Архитектура PL/SQL • В ORACLE - tools: Язык программирования PL/SQL
Основы PL/SQL Язык программирования PL/SQL
Набор символов • В PL/SQL можно использовать: • буквы A .. Z, a .. z • цифры 0 .. 9 • табуляцию, пробел, символ возврата каретки • символы ( ) + - * / < > = ! ~ ; : . ‘@ % , “ # $ ^ & _ | { } ? [ ] • в символьных строках допускается использование кириллицы (русские буквы) Язык программирования PL/SQL
Лексические единицы • Разделители: • простые • составные • Идентификаторы • Литералы • Комментарии Язык программирования PL/SQL
Зарезервированные слова PL/SQL: (~ 200 слов) 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 Язык программирования PL/SQL
Комментарии -- это однострочный комментарий /* это многострочный комментарий */ Нельзя вкладывать комментарии друг в друга ! Язык программирования PL/SQL
Типы данных специфицируют формат хранения констант и переменных Язык программирования PL/SQL
Предопределенные типы данных Язык программирования PL/SQL
Категория NUMBER Язык программирования PL/SQL
Категория CHARACTER Язык программирования PL/SQL
Типы данных • Тип DATE: от 01 января 14712 г. до н.э. до 31 декабря 314712 г. н.э. • Тип BOOLEAN: TRUE FALSE NULL Язык программирования PL/SQL
Типы данных • Подтипы • Стандартные: SUBTYPE POSITIVE IS BINARY_INTEGER RANGE 1..2147483647; • Скалярные подтипы пользователя: SUBTYPE My_Typ IS BINARY_INTEGER RANGE 1..50; SUBTYPE My_Typ IS NUMBER(12,5); Язык программирования PL/SQL
Преобразование типов данных Язык программирования PL/SQL
Неявные преобразования типов позволяет использовать литералы, переменные и параметры одного типа там, где ожидается другой Язык программирования PL/SQL
Объявления переменных, констант, курсоров Язык программирования PL/SQL
Переменные, константы, курсоры • программа хранит значения в переменных и константах; • значения констант не могут изменяться; • Все переменные, константы и курсоры должны быть объявлены в декларативной части блока; • при объявлении можно присвоить начальное значение и определить ограничение NOT NULL. Язык программирования PL/SQL
Примеры: 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; Язык программирования PL/SQL
Атрибут %TYPE • позволяет ссылаться на: • тип данных ранее объявленной переменной; • существующий столбец базы данных. credit REAL(7,2); debit credit%TYPE; my_dname scott.dept.dname%TYPE; balance NUMBER(7,2); minimum_balance balance%TYPE:=10.00; Язык программирования PL/SQL
Упражнения • № 1-1 • № 1-2 • № 1-3 • № 1-4 Язык программирования PL/SQL
Атрибут %ROWTYPE. • определяет тип записи, представляющей строку в таблице, представлении или в курсоре: DECLARE emp_rec emp%ROWTYPE; CURSOR c1 IS SELECT deptno, dname, loc FROM dept; dept_rec c1%ROWTYPE; ... Язык программирования PL/SQL
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; Язык программирования PL/SQL
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; Язык программирования PL/SQL
Составной тип RECORD. • %ROWTYPEфактически объявляет переменную типа RECORD; • можно объявить переменную типа RECORDявно, например: Язык программирования PL/SQL
Составной тип RECORD. DECLARE TYPEAddress IS RECORD (town VARCHAR2(40), street VARCHAR2(40, post_box NUMBER(12)); TYPEDeptRecTyp IS RECORD (deptno NUMBER(2) NOT NULL := 20, dname dept.dname%TYPE, loc dept.loc%TYPE, adr Address ); dept_rec3DeptRecTyp; ... Язык программирования PL/SQL
Составной тип RECORD. Для обращения к элементам переменной типа RECORD используются квалифицированные ссылки, например: dept_rec3.adr.town := ‘МОСКВА’; Язык программирования PL/SQL
Видимость DECLARE x REAL; BEGIN ... DECLARE x REAL; BEGIN ... END; ... END; Область действия DECLARE x REAL; BEGIN ... DECLARE x REAL; BEGIN ... END; ... END; Область действия переменных Внешняя переменная x: Язык программирования PL/SQL
Видимость DECLARE x REAL; BEGIN ... DECLARE x REAL; BEGIN … END; ... END; Область действия DECLARE x REAL; BEGIN … DECLARE x REAL; BEGIN ... END; ... END; Область действия переменных Внутренняя переменнаяx: Язык программирования PL/SQL
Порядок выполнения операторов • **, NOT • +, - • *, / • +, -, || • =, !=, <, >, <=, >=, IS NULL, LIKE, BETWEEN, IN • AND • OR скобки изменяют порядок вычисления выражений Язык программирования PL/SQL