1 / 120

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

Язык программирования ORACLE PL/SQL. Учебные материалы ИВЦ АИС. Содержание курса. (1). Общий обзор PL/SQL Что такое PL/SQL и зачем он нужен Архитектура PL/SQL Основы PL/SQL. Содержание курса. (2). Взаимодействие с ORACLE Подпрограммы Пакеты Хранимые функции в SQL- операторах.

inoke
Download Presentation

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

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

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

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

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

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

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

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

  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; Язык программирования PL/SQL

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

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

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

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

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

  17. СУБД OPEN FETCH INTO ПРОГРАММНЫЕ ПЕРЕМЕННЫЕ 1254 КЛЕРК КУЗНЕЦОВ 4567 МЕНЕДЖЕР СИДОРОВ 7643 ПРОДАВЕЦ ИВАНОВ 6543 ДИРЕКТОР ПЕТРОВ Понятие курсора CLOSE Язык программирования PL/SQL

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

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

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

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

  22. PL/SQL Engine Процедуры Обработчик процедур PL/SQL PL/SQL БЛОК PL/SQL БЛОК SQL Архитектура PL/SQL • В ORACLE - server: Язык программирования PL/SQL

  23. ORACLE - сервер Host - программа или инструмент. средство ORACLE PL/SQL Engine Процедуры Обработчик процедур PL/SQL Анонимный PL/SQL БЛОК Анонимный PL/SQL БЛОК SQL Обработчик SQL - операторов Архитектура PL/SQL • В ORACLE - tools: Язык программирования PL/SQL

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

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

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

  27. Зарезервированные слова 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

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

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

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

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

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

  33. Типы данных • Тип DATE: от 01 января 14712 г. до н.э. до 31 декабря 314712 г. н.э. • Тип BOOLEAN: TRUE FALSE NULL Язык программирования 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); Язык программирования PL/SQL

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

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

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

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

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

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

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

  46. Составной тип 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

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

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

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

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

More Related