Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АрхитектураБиологияГеографияДругоеИностранные языки
ИнформатикаИсторияКультураЛитератураМатематика
МедицинаМеханикаОбразованиеОхрана трудаПедагогика
ПолитикаПравоПрограммированиеПсихологияРелигия
СоциологияСпортСтроительствоФизикаФилософия
ФинансыХимияЭкологияЭкономикаЭлектроника

Конструкция CURRENT OF применяется для обращения к последней просмотренной в курсоре строке с целью ее изменения или удаления из таблицы.

RESULT_CACHE_REMOTE_EXPIRATION | SHARED_SERVERS | Процесс-слушатель Oracle и его основные параметры. Сетевые настройки Oracle. | Метод аутентификации | Типы данных базы данных Oracle. | Изменение физических атрибутов таблицы | Удаление таблиц | Создание индексов связанных с ограничением целостности | Последовательность СУБД Oracle и ее параметры. | Системные и объектные привилегии СУБД Oracle. |


Читайте также:
  1. Alexander Graham Bell (1847-1922): speech shaped current
  2. Current assets
  3. CURRENT ISSUES
  4. CURRENT ISSUES
  5. CURRENT ISSUES
  6. CURRENT ISSUES
  7. CURRENT ISSUES

DECLARE

CURSOR CR1 (CAPACITY_MIN JEU_12.AUDITORIUM.AUDITORIUM%TYPE, CAPACITY_MAX JEU_12.AUDITORIUM.AUDITORIUM%TYPE)

IS SELECT * FROM AUDITORIUM WHERE AUDITORIUM_CAPACITY BETWEEN CAPACITY_MIN AND CAPACITY_MAX ORDER BY AUDITORIUM_CAPACITY FOR UPDATE;

AUDITORIUM_REC JEU_12.AUDITORIUM%ROWTYPE;

BEGIN

DBMS_OUTPUT.PUT_LINE('---- [40; 80]-BEFORE');

FOR AUDITORIUM_REC IN CR1(40, 80)

LOOP

DBMS_OUTPUT.PUT_LINE(CR1%ROWCOUNT||' '||

TRIM(AUDITORIUM_REC.AUDITORIUM)||

' '||AUDITORIUM_REC.AUDITORIUM_CAPACITY);

END LOOP;

FOR AUDITORIUM_REC IN CR1(40, 80)

LOOP

UPDATE AUDITORIUM SET AUDITORIUM_CAPACITY=AUDITORIUM_CAPACITY*0.9 WHERE CURRENT OF CR1;

END LOOP;

DBMS_OUTPUT.PUT_LINE('---- [40; 80]-AFTER');

FOR AUDITORIUM_REC IN CR1(40, 80)

LOOP

DBMS_OUTPUT.PUT_LINE(CR1%ROWCOUNT||' '||

TRIM(AUDITORIUM_REC.AUDITORIUM)||

' '||AUDITORIUM_REC.AUDITORIUM_CAPACITY);

END LOOP;

EXCEPTION

WHEN OTHERS

THEN DBMS_OUTPUT.PUT_LINE(SQLERRM);

END;

 

29. Язык PL/SQL:применение псевдостолбцов ROWID, ROWNUM.

Псевдостолбец ROWID (зашифрованный 64-битовым ключом уникальный адрес строки таблицы)

Применяется для наиболее быстрого обращения к конкретной строке.

SELECT SUM(AUDITORIUM_CAPACITY) FROM AUDITORIUM;

DECLARE

CURSOR CURS_AUDITORIUM (CAPACITY JEU_12.AUDITORIUM.AUDITORIUM%TYPE)

IS SELECT AUDITORIUM, AUDITORIUM_CAPACITY, ROWID FROM AUDITORIUM

WHERE AUDITORIUM_CAPACITY>=CAPACITY FOR UPDATE;

BEGIN

FOR XXX IN CURS_AUDITORIUM(80)

LOOP

DELETE AUDITORIUM WHERE ROWID=XXX.ROWID;

END LOOP;

FOR YYY IN CURS_AUDITORIUM(30)

LOOP

UPDATE AUDITORIUM SET AUDITORIUM_CAPACITY=AUDITORIUM_CAPACITY*2 WHERE ROWID=YYY.ROWID;

END LOOP;

EXCEPTION

WHEN OTHERS

THEN DBMS_OUTPUT.PUT_LINE(SQLERRM);

END;

ROWNUM - логический номер записи в запросе, используется для обращения к определенным строкам, полученным в результате запроса(например с использованием order).

 

30. Язык PL/SQL: исключения, стандартные исключения, генерация и обработка исключения. Принцип распространения исключений. Инструкция RAISE_APPLICATION_ERROR.

Исключения - это события, сигнализирующие о возникновении неразрешимых или просто предусмотренных программистом ситуаций, требующих обработки до дальнейшего выполнения программного кода.

Встроенное исключение – исключение предопределенного (встроенного) в Oracle типа (no_data_found, too_many_rows…).

Пользовательские исключения – созданные пользователем типы исключений.

Оператор raise позволяет создать исключение ранее предопределенного типа, передавая в качестве параметра ему этот тип.

 

DECLARE

E_NAMESAKE EXCEPTION;

PRAGMA EXCEPTION_INIT(E_NAMESAKE, 100);

N NUMBER(5);

BEGIN

SELECT COUNT(*) INTO N FROM TEACHER T1, TEACHER T2

WHERE T1.TEACHER_NAME=T2.TEACHER_NAME AND T1.TEACHER!=T2.TEACHER;

IF N = 0 THEN RAISE E_NAMESAKE;

END IF;

DBMS_OUTPUT.PUT_LINE(N);

EXCEPTION

WHEN E_NAMESAKE

THEN DBMS_OUTPUT.PUT_LINE(SQLERRM);

DBMS_OUTPUT.PUT_LINE(SQLCODE);

DBMS_OUTPUT.PUT_LINE(SUBSTR(DBMS_UTILITY.FORMAT_ERROR_STACK, 1, 200));

DBMS_OUTPUT.PUT_LINE(SUBSTR(DBMS_UTILITY.FORMAT_ERROR_BACKTRACE, 1, 200));

END;

Raise_A_E позволяет создать исключение ранее не определенного типа, передав в параметрах код исключения и информационное сообщение.

BEGIN

RAISE_APPLICATION_ERROR(-20000, 'USER ERROR MESSAGE');

EXCEPTION

WHEN OTHERS

THEN DBMS_OUTPUT.PUT_LINE(SQLERRM);

DBMS_OUTPUT.PUT_LINE(SQLCODE);

DBMS_OUTPUT.PUT_LINE(SUBSTR(DBMS_UTILITY.FORMAT_ERROR_STACK, 1, 200));

DBMS_OUTPUT.PUT_LINE(SUBSTR(DBMS_UTILITY.FORMAT_ERROR_BACKTRACE, 1, 200));

END;

Во вложенных блоках ошибки обрабатываются ближайшими секциями обработки, способными перехватывать данный тип исключений. Иными словами, ошибка, возникшая во внутреннем блоке будет обработана его же секцией обработки, при условии наличия необходимого обработчика, если таковая имеется, в противном случае она будет обработана внешним ближайшим блоком обработки, способным обработать данный тип исключения.

DECLARE

AA EXCEPTION;

BB EXCEPTION;

CC EXCEPTION;

BEGIN --1

BEGIN --2

DBMS_OUTPUT.PUT_LINE('BLOCK 2');

RAISE AA;

EXCEPTION

WHEN AA THEN DBMS_OUTPUT.PUT_LINE('BLOCK 2:AA');

RAISE BB;

WHEN OTHERS

THEN DBMS_OUTPUT.PUT_LINE('BLOCK 2:OTHERS');

END; --2

DBMS_OUTPUT.PUT_LINE('BLOCK 1');

EXCEPTION

WHEN BB THEN DBMS_OUTPUT.PUT_LINE('BLOCK 1:BB');

END; --1

31. Язык PL/SQL:встроенные функции.

Числовые встроенные функции:

CEIL(10.455) --округление до верхнего целого

FLOOR(10.455) --округление до нижнего целого

TRUNC(10.455, 1) --усечение десятичных разрядов

ROUND(10.455, 1) --усечение десятичных разрядов

MOD(7, 4) --вычисление остатка от деления

POWER(2, 4) --вычисление степени числа

SIGN(-11) --выделение знака числа

GREATEST(11, 5, 7, 70) --вычисление наибольшего из списка значений

Встроенные функции для работы с датами:

CURRENT_DATE --получение текущей даты и времени

CURRENT_TIMESTAMP --получение штампа

TO_DATE('07.02.2038', 'DD.MM.YYYY') --преобразование строки в дату

TO_CHAR(SYSDATE, 'DD.MM') --преобразование даты в строку

NEXT_DAY('01-12-10', 'СУББОТА') --получение следующего дня недели

LAST_DAY(SYSDATE) --получение последнего дня месяца

EXTRACT(MONTH FROM SYSDATE) --выделение компонент даты

ROUND(SYSDATE, 'YEAR') --округление даты

TRUNC(SYSDATE, 'YEAR') --округление даты

Встроенные функции конвертации:

TO_NUMBER('666.74', '999.99') --преобразование строки в число

TO_CHAR(666.74, '999.99') --преобразование числа в строку

TO_DATE('07.02.2038', 'DD.MM.YYYY') --преобразование строки в дату

TO_CHAR(SYSDATE, 'DD.MM') --преобразование даты в строку


Дата добавления: 2015-11-16; просмотров: 60 | Нарушение авторских прав


<== предыдущая страница | следующая страница ==>
Операторы цикла в PLSQL| Методы и исключения для работы с коллекциями

mybiblioteka.su - 2015-2024 год. (0.01 сек.)