В PL/SQL поддерживаются два типа
Для запросов, возвращающих более одной строки, можно использовать только
Для управления , , и .
выполняет объявление
открывает
выполняет последовательное извлечение строк из результирующего набора от начала до конца
закрывает
Для объявления , который может иметь следующее формальное описание:
CURSOR cursor_name
[(parameter[,parameter]...)]
[RETURN return_type]
IS select_statement;
Каждый параметр parameter определяется как:
cursor_parameter_name [IN]
datatype [{:= | DEFAULT} expr]
Параметр return_type определяет запись или строку таблицы базы данных, используемую для возвращаемых значений. Тип возвращаемого значения должен соответствовать столбцам, перечисленным в операторе SELECT. Список параметров определяет параметры .
Одновременно с созданием результирующего набора можно выполнить блокировку выбираемых строк. Для этого в операторе SELECT следует указать фразу FOR UPDATE.
Для задания параметров
Для работы с
%ISOPEN - возвращает значение TRUE, если %FOUND - определяет, найдена ли строка, удовлетворяющая условию %NOTFOUND - возвращает TRUE, если строка не найдена %ROWCOUNT - возвращает номер текущей строкиОператор может быть выполнен в цикле LOOP-END LOOP. Это позволяет последовательно просматривать весь результирующий набор, который был открыт оператором .
Например:
DECLARE
CURSOR c1 IS SELECT f1, f2, f3, f4
FROM tbl1
WHERE f4 > 100;
CURSOR c2 RETURN tbl2%ROWTYPE IS
SELECT * FROM tbl2
WHERE f1_t2 = 10;
- Список параметров
- курсора
CURSOR c3 (p1 INTEGER DEFAULT 10,
p2 INTEGER DEFAULT 1300)
IS SELECT f1, f2, f3, f4
FROM tbl1
WHERE f4 > p1 AND f2 = p2;
- ...
BEGIN
OPEN c1; - Открытие курсора c1
LOOP
- Выборка одной строки
FETCH c1 INTO rec1;
- Строка успешно выбрана
EXIT WHEN c1%NOTFOUND;
END LOOP;
- Закрытие курсора
CLOSE c1;
- Открытие курсора c3
OPEN c3(10,700);
- ...
END;
Для повторного создания результирующего набора для других значений параметров
При выполнении SQL-оператора, для которого не был объявлен
При применении неявного , и .
Если при неявном TOO_MANY_ROWS.
Если
Объявление
CURSOR cursor_name [(parameter [, parameter]...)] RETURN return_type;
Например:
- Создание пакета
CREATE PACKAGE p1 AS
- Объявление курсора
CURSOR c1 RETURN tbl1%ROWTYPE;
END p1;
- Создание тела пакета
CREATE PACKAGE BODY p1 AS
- Спецификация курсора
CURSOR c1 RETURN tbl1%ROWTYPE
IS SELECT * FROM tbl1
WHERE f3 > 700;
END p1;
Вместо управления , и язык PL/SQL предоставляет возможность последовательной
Цикл FOR с
%ROWTYPE.Например:
DECLARE
CURSOR c1 IS
SELECT f1, f2 FROM tbl2
WHERE f1 = 10;
BEGIN
- Неявное объявление rec1
FOR rec1 IN c1 LOOP
/* Выбрана следующая
строка таблицы */
INSERT INTO temp_tbl
VALUES (rec1.f2);
END LOOP;
COMMIT;
END;
При объявлении . Переменная типа может передаваться через механизм RPC (вызовы удаленных процедур) между клиентским приложением и сервером Oracle. При использовании
Создание , а затем объявляется переменная этого типа.
Определить тип можно в любых блоках PL/SQL, подпрограммах или пакетах.
Определение типа может иметь следующее формальное описание:
TYPE ref_type_name IS REF CURSOR [ RETURN return_type ];
Параметр ref_type_name задает имя создаваемого типа, а параметр return_type должен определять запись или строку таблицы базы данных.
Если опция RETURN не указана, то RETURN обеспечивает более высокий уровень надежности, позволяя компилятору PL/SQL выполнять проверку
При выполнении SQL-запроса Oracle создает неименованную рабочую область, в которой содержится сформированный результирующий набор. Для доступа к этому результирующему набору может использоваться:
Однако
Рабочая область будет оставаться доступной до тех пор, пока на нее ссылается хотя бы одна
Для управления OPEN-FOR, и .
Оператор OPEN-FOR связывает
Оператор OPEN-FOR может иметь следующее формальное описание:
OPEN {cursor_variable_name |
:host_cursor_variable_name}
FOR select_statement;
Параметр указывает host_cursor_variable_name, которая была объявлена как переменная основного языка, если блок PL/SQL выполняется в режиме
Запрос, указываемый для
Запрос, на который ссылается FOR UPDATE.
Для , , и .
Например:
DECLARE
TYPE VarCur IS REF CURSOR
RETURN tbl1%ROWTYPE;
- Объявление переменной курсора
t1 VarCur;
BEGIN
IF NOT t1%ISOPEN THEN
- Открываем
- переменную курсора
OPEN t1 FOR SELECT *
FROM tbl1;
OPEN t1 FOR SELECT *
FROM tbl1
- Повторно открываем
- переменную курсора
WHERE f2>100;
END IF;
При попытке повторно открыть ранее открытую
Если попытаться повторно открыть уже открытый CURSOR_ALREADY_OPEN.
Если IN OUT.
Следующий пример демонстрирует применение в качестве переменной хост-переменной основного языка программирования.
/* Объявление хост-переменных */
EXEC SQL BEGIN DECLARE
/* Объявление переменной курсоров */
SQL_CURSOR cur1;
EXEC SQL END DECLARE SECTION;
/* Инициализация хост-переменной */
EXEC SQL ALLOCATE : cur1;
EXEC SQL EXECUTE
/* Передача хост-переменной
курсора в блок PL/SQL */
BEGIN
OPEN :cur1 FOR SELECT *
FROM emp;
- :
OPEN :cur1 FOR SELECT *
FROM temp_emp;
END;
END-EXEC;
Применение
OPEN-FOR, не должен содержать фразы FOR UPDATE ;NULL ;NULL ; REF CURSOR не могут использоваться для определения типа столбцов в SQL-операторах CREATE TABLE и CREATE VIEW, а также для определения типов элементов коллекций;FOR-IN-LOOP.Выборка строк из результирующего набора выполняется оператором , который может иметь следующее формальное описание:
FETCH {cursor_variable_name |
:host_cursor_variable_name}
INTO {variable_name
[, variable_name]... |
record_name};
Например:
DECLARE
TYPE VarCur IS REF CURSOR
RETURN tbl1%ROWTYPE;
- Объявление переменной курсора
t1 VarCur;
tbl1_rec tbl1%ROWTYPE;
BEGIN
IF NOT t1%ISOPEN THEN
- Открываем
- переменную курсора
OPEN t1 FOR SELECT * FROM tbl1;
LOOP
- Извлечение строки
FETCH t1 INTO tbl1_rec;
- Проверка атрибута
EXIT WHEN t1%NOTFOUND;
END LOOP;
END IF;
CLOSE t1;
В PL/SQL поддерживаются два типа
Для запросов, возвращающих более одной строки, можно использовать только
Для управления , , и .
выполняет объявление
открывает
выполняет последовательное извлечение строк из результирующего набора от начала до конца
закрывает
Для объявления , который может иметь следующее формальное описание:
CURSOR cursor_name
[(parameter[,parameter]...)]
[RETURN return_type]
IS select_statement;
Каждый параметр parameter определяется как:
cursor_parameter_name [IN]
datatype [{:= | DEFAULT} expr]
Параметр return_type определяет запись или строку таблицы базы данных, используемую для возвращаемых значений. Тип возвращаемого значения должен соответствовать столбцам, перечисленным в операторе SELECT. Список параметров определяет параметры .
Одновременно с созданием результирующего набора можно выполнить блокировку выбираемых строк. Для этого в операторе SELECT следует указать фразу FOR UPDATE.
Для задания параметров
Для работы с
%ISOPEN - возвращает значение TRUE, если %FOUND - определяет, найдена ли строка, удовлетворяющая условию %NOTFOUND - возвращает TRUE, если строка не найдена %ROWCOUNT - возвращает номер текущей строкиОператор может быть выполнен в цикле LOOP-END LOOP. Это позволяет последовательно просматривать весь результирующий набор, который был открыт оператором .
Например:
DECLARE
CURSOR c1 IS SELECT f1, f2, f3, f4
FROM tbl1
WHERE f4 > 100;
CURSOR c2 RETURN tbl2%ROWTYPE IS
SELECT * FROM tbl2
WHERE f1_t2 = 10;
- Список параметров
- курсора
CURSOR c3 (p1 INTEGER DEFAULT 10,
p2 INTEGER DEFAULT 1300)
IS SELECT f1, f2, f3, f4
FROM tbl1
WHERE f4 > p1 AND f2 = p2;
- ...
BEGIN
OPEN c1; - Открытие курсора c1
LOOP
- Выборка одной строки
FETCH c1 INTO rec1;
- Строка успешно выбрана
EXIT WHEN c1%NOTFOUND;
END LOOP;
- Закрытие курсора
CLOSE c1;
- Открытие курсора c3
OPEN c3(10,700);
- ...
END;
Для повторного создания результирующего набора для других значений параметров
При выполнении SQL-оператора, для которого не был объявлен
При применении неявного , и .
Если при неявном TOO_MANY_ROWS.
Если
Объявление
CURSOR cursor_name [(parameter [, parameter]...)] RETURN return_type;
Например:
- Создание пакета
CREATE PACKAGE p1 AS
- Объявление курсора
CURSOR c1 RETURN tbl1%ROWTYPE;
END p1;
- Создание тела пакета
CREATE PACKAGE BODY p1 AS
- Спецификация курсора
CURSOR c1 RETURN tbl1%ROWTYPE
IS SELECT * FROM tbl1
WHERE f3 > 700;
END p1;
Вместо управления , и язык PL/SQL предоставляет возможность последовательной
Цикл FOR с
%ROWTYPE.Например:
DECLARE
CURSOR c1 IS
SELECT f1, f2 FROM tbl2
WHERE f1 = 10;
BEGIN
- Неявное объявление rec1
FOR rec1 IN c1 LOOP
/* Выбрана следующая
строка таблицы */
INSERT INTO temp_tbl
VALUES (rec1.f2);
END LOOP;
COMMIT;
END;
При объявлении . Переменная типа может передаваться через механизм RPC (вызовы удаленных процедур) между клиентским приложением и сервером Oracle. При использовании
Создание , а затем объявляется переменная этого типа.
Определить тип можно в любых блоках PL/SQL, подпрограммах или пакетах.
Определение типа может иметь следующее формальное описание:
TYPE ref_type_name IS REF CURSOR [ RETURN return_type ];
Параметр ref_type_name задает имя создаваемого типа, а параметр return_type должен определять запись или строку таблицы базы данных.
Если опция RETURN не указана, то RETURN обеспечивает более высокий уровень надежности, позволяя компилятору PL/SQL выполнять проверку
При выполнении SQL-запроса Oracle создает неименованную рабочую область, в которой содержится сформированный результирующий набор. Для доступа к этому результирующему набору может использоваться:
Однако
Рабочая область будет оставаться доступной до тех пор, пока на нее ссылается хотя бы одна
Для управления OPEN-FOR, и .
Оператор OPEN-FOR связывает
Оператор OPEN-FOR может иметь следующее формальное описание:
OPEN {cursor_variable_name |
:host_cursor_variable_name}
FOR select_statement;
Параметр указывает host_cursor_variable_name, которая была объявлена как переменная основного языка, если блок PL/SQL выполняется в режиме
Запрос, указываемый для
Запрос, на который ссылается FOR UPDATE.
Для , , и .
Например:
DECLARE
TYPE VarCur IS REF CURSOR
RETURN tbl1%ROWTYPE;
- Объявление переменной курсора
t1 VarCur;
BEGIN
IF NOT t1%ISOPEN THEN
- Открываем
- переменную курсора
OPEN t1 FOR SELECT *
FROM tbl1;
OPEN t1 FOR SELECT *
FROM tbl1
- Повторно открываем
- переменную курсора
WHERE f2>100;
END IF;
При попытке повторно открыть ранее открытую
Если попытаться повторно открыть уже открытый CURSOR_ALREADY_OPEN.
Если IN OUT.
Следующий пример демонстрирует применение в качестве переменной хост-переменной основного языка программирования.
/* Объявление хост-переменных */
EXEC SQL BEGIN DECLARE
/* Объявление переменной курсоров */
SQL_CURSOR cur1;
EXEC SQL END DECLARE SECTION;
/* Инициализация хост-переменной */
EXEC SQL ALLOCATE : cur1;
EXEC SQL EXECUTE
/* Передача хост-переменной
курсора в блок PL/SQL */
BEGIN
OPEN :cur1 FOR SELECT *
FROM emp;
- :
OPEN :cur1 FOR SELECT *
FROM temp_emp;
END;
END-EXEC;
Применение
OPEN-FOR, не должен содержать фразы FOR UPDATE ;NULL ;NULL ; REF CURSOR не могут использоваться для определения типа столбцов в SQL-операторах CREATE TABLE и CREATE VIEW, а также для определения типов элементов коллекций;FOR-IN-LOOP.Выборка строк из результирующего набора выполняется оператором , который может иметь следующее формальное описание:
FETCH {cursor_variable_name |
:host_cursor_variable_name}
INTO {variable_name
[, variable_name]... |
record_name};
Например:
DECLARE
TYPE VarCur IS REF CURSOR
RETURN tbl1%ROWTYPE;
- Объявление переменной курсора
t1 VarCur;
tbl1_rec tbl1%ROWTYPE;
BEGIN
IF NOT t1%ISOPEN THEN
- Открываем
- переменную курсора
OPEN t1 FOR SELECT * FROM tbl1;
LOOP
- Извлечение строки
FETCH t1 INTO tbl1_rec;
- Проверка атрибута
EXIT WHEN t1%NOTFOUND;
END LOOP;
END IF;
CLOSE t1;
Для получения официальных документов о завершении программы дополнительного профессионального образования (удостоверения о повышении квалификации, дипломов о профессиональной переподготовке и MBA) необходимо предоставить:
Внимание! Вы можете не заказывать доставку бумажной версии официального документы, а скачать его в электронном виде и распечатать самостоятельно. Информация о выданном документе в течение 1 месяца загружается в Федеральную информационную систему «Федеральный реестр сведений о документах об образовании и (или) о квалификации, документах об обучении» - ФИС ФРДО.
Доступ на новый сайт осуществляется с использованием адреса электронной почты, который был указан вами при регистрации на "старом". Мы постарались перенести все ваши данные с прежнего ресурса, однако не исключена вероятность потери части информации.
При возникновении проблемы со входом, воспользуйтесь функцией сброса пароля
Если вы обнаружите несоответствия, пожалуйста, сообщите нам.