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

Операторы цикла в PLSQL

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


Читайте также:
  1. I. ОБЩИЕ ПРАВИЛА, ПРИМЕНЯЕМЫЕ К МОТОЦИКЛАМ УЧАСТНИКОВ СОРЕВНОВАНИЯ.
  2. Quot;Правило четырех недель " и его связь с рыночными циклами
  3. Аденилатциклаза
  4. Аденилатциклаза катализирует реакцию
  5. Буксировка орудий Джипами и Мотоциклами
  6. Величина степени сжатия цикла зависит от используемого в нем вида термодинамического процесса газа.
  7. ВЛИЯНИЕ СКОЛЬЗЯЩИХ СРЕДНИХ НА АМПЛИТУДУ И ФАЗУ ЦИКЛА

Loop – оператор бесконечного цикла, в том случае если используется без вспомогательных выражений. Может использоваться с выражением выхода из цикла exit when.

LOOP

X:=X + 1;

DBMS_OUTPUT.PUT_LINE(X);

EXIT WHEN X >= 5;

END LOOP;

While – оператор цикла, содержащий в себе условие выполнения цикла.

WHILE(X<5)

LOOP

X:=X+1;

DBMS_OUTPUT.PUT_LINE(X);

END LOOP;

For – оператор цикла, содержащий в себе условие выполнения, в виде интервала значений.

FOR K IN 1..5

LOOP

DBMS_OUTPUT.PUT_LINE(K);

END LOOP;

 

27. Язык PL/SQL: явные и неявные курсоры. Схемы обработки курсора. Атрибуты курсора. Курсорные переменные.

Курсор — ссылка на контекстную область памяти. В некоторых реализациях информационно-логического языка SQL (Oracle, Microsoft SQL Server) — получаемый при выполнении запроса результирующий набор и связанный с ним указатель текущей записи.

Курсор - механизм построчной обработки результирующего набора.

В PL/SQL поддерживаются два типа курсоров: явные и неявные. Явный курсор объявляется разработчиком, а неявный курсор не требует объявления.

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

Курсор может быть объявлен в секциях объявлений любого блока PL/SQL, подпрограммы или пакета.

Неявный курсор:

DECLARE

FACULTY_REC FACULTY%ROWTYPE;

BEGIN

SELECT * INTO FACULTY_REC FROM FACULTY WHERE FACULTY LIKE '%ИДиП%';

DBMS_OUTPUT.PUT_LINE(RTRIM(FACULTY_REC.FACULTY)||':'||FACULTY_REC.FACULTY_NAME);

EXCEPTION

WHEN OTHERS

THEN DBMS_OUTPUT.PUT_LINE(SQLERRM);

END;

Явный курсор:

DECLARE

CURSOR CURS_TEACHER IS SELECT TEACHER, TEACHER_NAME, PULPIT FROM TEACHER;

M_TEACHER JEU_12.TEACHER.TEACHER%TYPE;

M_TEACHER_NAME JEU_12.TEACHER.TEACHER_NAME%TYPE;

M_PULPIT JEU_12.TEACHER.PULPIT%TYPE;

BEGIN

OPEN CURS_TEACHER;

DBMS_OUTPUT.PUT_LINE('ROWCOUNT = '||CURS_TEACHER%ROWCOUNT);

LOOP

FETCH CURS_TEACHER INTO M_TEACHER, M_TEACHER_NAME, M_PULPIT;

EXIT WHEN CURS_TEACHER%NOTFOUND;

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

M_TEACHER||' '||M_TEACHER_NAME

||' '||M_PULPIT);

END LOOP;

DBMS_OUTPUT.PUT_LINE('ROWCOUNT = '||CURS_TEACHER%ROWCOUNT);

CLOSE CURS_TEACHER;

EXCEPTION

WHEN OTHERS

THEN DBMS_OUTPUT.PUT_LINE(SQLERRM);

END;

Неявный курсор использует точную выборку – запрос должен возвращать ровно одну строку, в противном случае генерируется исключение too_many_rows или no_data_found.

Явный курсор предполагает следующую схему работы:

Declare – объявить курсор.

Open – открыть курсор.

Fetch – просмотреть курсор.

Close – закрыть курсор.

Атрибуты курсора - предопределенные системные переменные, характеризующие состояние курсора.

%ISOPEN — возвращает значение TRUE, если курсор открыт.

%FOUND — определяет, найдена ли строка, удовлетворяющая условию.

%NOTFOUND — возвращает TRUE, если строка не найдена.

%ROWCOUNT — возвращает номер текущей строки.

Статические курсоры связанны с одним SQL-оператором, который был известен при компиляции блока. Курсорная же переменная (cursor variable) может быть связана с различными операторами во время выполнения программы. Курсорные переменные аналогичны переменным PL/SQL, в которых могут содержаться различные значения. Статические же курсоры аналогичны константам PL/SQL, так как они могут быть связаны только с одним запросом на этапе выполнения программы.

TYPE PULPIT_TYPE IS REF CURSOR RETURN PULPIT%ROWTYPE;

XCURS PULPIT_TYPE;

Или

XCURS SYS_REFCURSOR;

DECLARE

TYPE PULPIT_TYPE IS REF CURSOR RETURN PULPIT%ROWTYPE;

XCURS PULPIT_TYPE;

REC_PULPIT PULPIT%ROWTYPE;

BEGIN

OPEN XCURS FOR SELECT * FROM JEU_12.PULPIT;

FETCH XCURS INTO REC_PULPIT;

WHILE (XCURS%FOUND)

LOOP

DBMS_OUTPUT.PUT_LINE(XCURS%ROWCOUNT||' '||TRIM(REC_PULPIT.PULPIT_NAME)||' '||REC_PULPIT.FACULTY);

FETCH XCURS INTO REC_PULPIT;

END LOOP;

CLOSE XCURS;

EXCEPTION

WHEN OTHERS

THEN DBMS_OUTPUT.PUT_LINE(SQLERRM);

END;

--

DECLARE

XCURS SYS_REFCURSOR;

REC_PULPIT PULPIT%ROWTYPE;

BEGIN

OPEN XCURS FOR SELECT * FROM JEU_12.PULPIT WHERE FACULTY='ИДиП';

FETCH XCURS INTO REC_PULPIT;

WHILE (XCURS%FOUND)

LOOP

DBMS_OUTPUT.PUT_LINE(XCURS%ROWCOUNT||' '||TRIM(REC_PULPIT.PULPIT_NAME)||' '||REC_PULPIT.FACULTY);

FETCH XCURS INTO REC_PULPIT;

END LOOP;

CLOSE XCURS;

EXCEPTION

WHEN OTHERS

THEN DBMS_OUTPUT.PUT_LINE(SQLERRM);

END;

28. Язык PL/SQL: курсорные подзапросы, конструкция CURRENT OF.

Курсорный подзапрос – метод построения запросов, при котором одним из возвращаемых значений (один из столбцов) будет курсор, а остальные будут являть собой обычные значения. В дальнейшем с этим возвращаемым в каждой строке курсором можно работать как с обычным, то есть просматривать при помощи fetch.


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


<== предыдущая страница | следующая страница ==>
Системные и объектные привилегии СУБД Oracle.| Конструкция CURRENT OF применяется для обращения к последней просмотренной в курсоре строке с целью ее изменения или удаления из таблицы.

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