Коллекцией называется упорядоченная группа элементов одного типа. Язык PL/SQL поддерживает три вида коллекций:
Доступ к любому элементу
Для создания коллекции следует определить тип коллекции - TABLE или VARRAY - и объявить переменную этого типа. Определение типа выполняется в секции объявлений блока PL/SQL, подпрограммы или пакета.
Определение типа
TYPE type_name IS TABLE OF element_type [NOT NULL];
Параметр type_name указывает имя определяемого типа, а element_type - это любой допустимый тип данных PL/SQL, исключая некоторые типы, в том числе VARRAY, TABLE, BOOLEAN, LONG, REF CURSOR и т.п.
1 до 2147483647 DELETE.
Определение
TYPE type_name IS TABLE OF element_type [NOT NULL] INDEX BY BINARY_INTEGER;
Определение типа
TYPE type_name IS
{VARRAY | VARYING ARRAY} (size_limit)
OF element_type [NOT NULL];
Параметр type_name указывает имя определяемого типа, size_limit - максимальное количество элементов, а element_type - это любой допустимый тип данных PL/SQL, исключая некоторые типы, такие как VARRAY, TABLE, BOOLEAN, LONG, REF CURSOR и т.п.
Если типом элемента является тип
Максимальное количество элементов в
Например:
DECLARE
TYPE d1 IS VARRAY(365) OF DATE;
TYPE rec1 IS
RECORD (v1 VARCHAR2(10),
v2 VARCHAR2(10));
- Массив записей
TYPE arr_rec IS VARRAY(250) OF rec1;
- Вложенная таблица
TYPE F1T1 IS TABLE OF tbl1.f1%TYPE;
CURSOR c1 IS SELECT * FROM tbl1;
- Массив записей,
- основанный на курсоре
TYPE t1 IS VARRAY(50) OF c1%ROWTYPE;
TYPE t2 IS TABLE OF tbl1%ROWTYPE
- Индексированная таблица
INDEX BY BINARY_INTEGER;
- Объявление переменной
rec_t2 t2;
BEGIN
/* Использование переменной
типа "индексированная таблица" */
SELECT * INTO rec_t2(120) FROM tbl1
WHERE f1 = 120;
END;
NULL.
Например:
DECLARE
CREATE TYPE rec_var1
AS VARRAY(3) OF num;
CREATE TYPE rec_var2
AS VARRAY(3) OF rec_obj;
r1 rec_var1; r2 rec_var2;
BEGIN
/* Инициализация коллекции
из трех элементов */
r1 := rec_var1 (2.0, 2.1, 2.2);
/*Инициализация varray-массива,
содержащего объекты типа rec_obj */
r2 := rec_var2 (rec_obj(1, 100, 'fff'),
rec_obj (2,110, 'ggg'),
rec_obj (3,120, 'jjj'));
Оператор позволяет сохранить определяемый тип в базе данных.
Например:
BEGIN INSERT INTO tbl_coll VALUES (1, 'aaa', rec_obj (3,120, 'jjj'));
В PL/SQL реализован ряд
collection_name.method_name[(parameters)]
Эти методы нельзя вызывать из SQL-оператора.
В следующей таблице приведено описание встроенных функций, используемых для работы с коллекциями.
| Метод | Описание |
|---|---|
EXISTS(n) |
Если n -ый элемент коллекции существует, то функция возвращает значение TRUE |
COUNT |
Функция возвращает реальное количество элементов, которые содержит коллекция |
LIMIT |
Функция возвращает размер NULL - для |
DELETE(m,n) |
Эта процедура удаляет элементы из n удаляется n -ый элемент n до m |
FIRST, LAST |
Функции возвращают наименьший и наибольший индекс элементов коллекции. Для пустой NULL. Для FIRST всегда возвращает значение 1 |
|
Эта функция используется для цикла или последовательного просмотра элементов n. Если такого элемента нет, то возвращается значение NULL |
NEXT(n) |
Функция употребляется для цикла или последовательного просмотра элементов n. Если такого элемента нет, то возвращается значение NULL |
EXTEND(n,i) |
Функция увеличивает размер null -элемент, а если указан только параметр n, то добавляются n null -элементов. Если задано оба параметра, то добавляются n элементов, являющихся копиями i -го элемента коллекции |
|
Функция выполняет удаление одного или нескольких элементов n последних элементов коллекции. Если значение параметра превышает реальное количество элементов, возвращаемое функцией COUNT, то инициируется исключение. Если элемент был ранее удален функцией DELETE, то он все равно будет входить в число удаляемых функцией элементов |
Применение функций и EXTEND реализует для DELETE выполняет удаление элементов, оставляя пустые места, которые впоследствии учитываются функцией .
Значение, возвращаемое функцией COUNT, может использоваться как максимальное значение для счетчика цикла по элементам коллекции.
Например:
FOR i IN 1..tbl1.COUNT LOOP END LOOP;
Функция COUNT также позволяет определить количество строк, которые были извлечены из столбца базы данных во
Для COUNT, эквивалентно значению, возвращаемому функцией LAST. Для DELETE, удаляющая элементы из коллекции.
Перед тем как коллекция будет проинициализирована, можно использовать только метод EXISTS. При вызове любого другого
Например:
DECLARE
- Вложенная таблица
TYPE cl IS TABLE OF VARCHAR2(10);
c1 cl;
BEGIN
- Инициализации
- коллекции конструктором
c1 := cl('с 1', 'с 2', 'с 3');
- Удаление последнего (3-го) элемента
c1.DELETE(c1.LAST);
- Удаление двух последних элементов:
- (2-го и 3-го)
c1.TRIM(c1.COUNT);
- Запись в поток
- вывода значения 'с 1'
DBMS_OUTPUT.PUT_LINE(c1(1));
END;
Если при работе с коллекцией происходит ошибка, то Oracle инициирует бросок исключения. В следующей таблице приведены основные причины возникновения ошибок для коллекций.
| Исключение | Причина ошибки |
|---|---|
COLLECTION_IS_NULL |
Коллекция не была инициализирована |
NO_DATA_FOUND |
Индекс ссылается на ранее удаленный элемент коллекции |
SUBSCRIPT_BEYOND_COUNT |
Индекс больше, чем количество элементов в коллекции |
SUBSCRIPT_OUTSIDE_LIMIT |
Индекс не принадлежит допустимому диапазону значений индекса |
VALUE_ERROR |
Значение индекса равно NULL или не может быть преобразовано в целое |
Исключительная ситуация не инициируется, если для процедуры DELETE в качестве параметра передан индекс, равный NULL, а также при указании индекса ранее удаленного элемента в случае его замещения.
NULL.
Для объявления %ROWTYPE.
Объявление нового типа
TYPE type_name IS RECORD (field_declaration [, field_declaration]...);
field_declaration ) указывается как:
field_name field_type
[[NOT NULL] {:= | DEFAULT} expression]
Параметр type_name задает имя определяемого типа; field_type указывает тип REF CURSOR ; expression определяет значение
Как и для коллекций, для создания RECORD, а затем объявить
Тип TABLE и VARRAY.
Для доступа к любому record_name.field_name. Если field_name также является record_name.field_name.field1_name и т.д.
В выражениях языка PL/SQL выполнять присваивание значения можно как отдельно
Выполнять присвоение значения всей
INTO -переменной в SQL-операторе SELECT или FETCH.Например:
DECLARE
- Определение типа
TYPE T_rec IS RECORD (
f1 tbl1.f1%TYPE,
f2 VARCHAR2(15),
f3 REAL(7,2));
- Тип на основе строки таблицы
rec3 tbl1%ROWTYPE;
- Объявление записи
rec1 T_rec;
f_sum1 REAL;
FUNCTION sum_f3 (n INTEGER)
RETURN T_rec IS
rec2 T_rec;
BEGIN
- :
- Функция возвращает значение
- типа запись
RETURN rec2;
END;
BEGIN
- Вызов функции
rec1 := sum_f3(4);
f_sum1 := sum_f3(4).f3;
SELECT * INTO rec3 FROM tbl1
WHERE f1 = 1;
END;
Коллекцией называется упорядоченная группа элементов одного типа. Язык PL/SQL поддерживает три вида коллекций:
Доступ к любому элементу
Для создания коллекции следует определить тип коллекции - TABLE или VARRAY - и объявить переменную этого типа. Определение типа выполняется в секции объявлений блока PL/SQL, подпрограммы или пакета.
Определение типа
TYPE type_name IS TABLE OF element_type [NOT NULL];
Параметр type_name указывает имя определяемого типа, а element_type - это любой допустимый тип данных PL/SQL, исключая некоторые типы, в том числе VARRAY, TABLE, BOOLEAN, LONG, REF CURSOR и т.п.
1 до 2147483647 DELETE.
Определение
TYPE type_name IS TABLE OF element_type [NOT NULL] INDEX BY BINARY_INTEGER;
Определение типа
TYPE type_name IS
{VARRAY | VARYING ARRAY} (size_limit)
OF element_type [NOT NULL];
Параметр type_name указывает имя определяемого типа, size_limit - максимальное количество элементов, а element_type - это любой допустимый тип данных PL/SQL, исключая некоторые типы, такие как VARRAY, TABLE, BOOLEAN, LONG, REF CURSOR и т.п.
Если типом элемента является тип
Максимальное количество элементов в
Например:
DECLARE
TYPE d1 IS VARRAY(365) OF DATE;
TYPE rec1 IS
RECORD (v1 VARCHAR2(10),
v2 VARCHAR2(10));
- Массив записей
TYPE arr_rec IS VARRAY(250) OF rec1;
- Вложенная таблица
TYPE F1T1 IS TABLE OF tbl1.f1%TYPE;
CURSOR c1 IS SELECT * FROM tbl1;
- Массив записей,
- основанный на курсоре
TYPE t1 IS VARRAY(50) OF c1%ROWTYPE;
TYPE t2 IS TABLE OF tbl1%ROWTYPE
- Индексированная таблица
INDEX BY BINARY_INTEGER;
- Объявление переменной
rec_t2 t2;
BEGIN
/* Использование переменной
типа "индексированная таблица" */
SELECT * INTO rec_t2(120) FROM tbl1
WHERE f1 = 120;
END;
NULL.
Например:
DECLARE
CREATE TYPE rec_var1
AS VARRAY(3) OF num;
CREATE TYPE rec_var2
AS VARRAY(3) OF rec_obj;
r1 rec_var1; r2 rec_var2;
BEGIN
/* Инициализация коллекции
из трех элементов */
r1 := rec_var1 (2.0, 2.1, 2.2);
/*Инициализация varray-массива,
содержащего объекты типа rec_obj */
r2 := rec_var2 (rec_obj(1, 100, 'fff'),
rec_obj (2,110, 'ggg'),
rec_obj (3,120, 'jjj'));
Оператор позволяет сохранить определяемый тип в базе данных.
Например:
BEGIN INSERT INTO tbl_coll VALUES (1, 'aaa', rec_obj (3,120, 'jjj'));
В PL/SQL реализован ряд
collection_name.method_name[(parameters)]
Эти методы нельзя вызывать из SQL-оператора.
В следующей таблице приведено описание встроенных функций, используемых для работы с коллекциями.
| Метод | Описание |
|---|---|
EXISTS(n) |
Если n -ый элемент коллекции существует, то функция возвращает значение TRUE |
COUNT |
Функция возвращает реальное количество элементов, которые содержит коллекция |
LIMIT |
Функция возвращает размер NULL - для |
DELETE(m,n) |
Эта процедура удаляет элементы из n удаляется n -ый элемент n до m |
FIRST, LAST |
Функции возвращают наименьший и наибольший индекс элементов коллекции. Для пустой NULL. Для FIRST всегда возвращает значение 1 |
|
Эта функция используется для цикла или последовательного просмотра элементов n. Если такого элемента нет, то возвращается значение NULL |
NEXT(n) |
Функция употребляется для цикла или последовательного просмотра элементов n. Если такого элемента нет, то возвращается значение NULL |
EXTEND(n,i) |
Функция увеличивает размер null -элемент, а если указан только параметр n, то добавляются n null -элементов. Если задано оба параметра, то добавляются n элементов, являющихся копиями i -го элемента коллекции |
|
Функция выполняет удаление одного или нескольких элементов n последних элементов коллекции. Если значение параметра превышает реальное количество элементов, возвращаемое функцией COUNT, то инициируется исключение. Если элемент был ранее удален функцией DELETE, то он все равно будет входить в число удаляемых функцией элементов |
Применение функций и EXTEND реализует для DELETE выполняет удаление элементов, оставляя пустые места, которые впоследствии учитываются функцией .
Значение, возвращаемое функцией COUNT, может использоваться как максимальное значение для счетчика цикла по элементам коллекции.
Например:
FOR i IN 1..tbl1.COUNT LOOP END LOOP;
Функция COUNT также позволяет определить количество строк, которые были извлечены из столбца базы данных во
Для COUNT, эквивалентно значению, возвращаемому функцией LAST. Для DELETE, удаляющая элементы из коллекции.
Перед тем как коллекция будет проинициализирована, можно использовать только метод EXISTS. При вызове любого другого
Например:
DECLARE
- Вложенная таблица
TYPE cl IS TABLE OF VARCHAR2(10);
c1 cl;
BEGIN
- Инициализации
- коллекции конструктором
c1 := cl('с 1', 'с 2', 'с 3');
- Удаление последнего (3-го) элемента
c1.DELETE(c1.LAST);
- Удаление двух последних элементов:
- (2-го и 3-го)
c1.TRIM(c1.COUNT);
- Запись в поток
- вывода значения 'с 1'
DBMS_OUTPUT.PUT_LINE(c1(1));
END;
Если при работе с коллекцией происходит ошибка, то Oracle инициирует бросок исключения. В следующей таблице приведены основные причины возникновения ошибок для коллекций.
| Исключение | Причина ошибки |
|---|---|
COLLECTION_IS_NULL |
Коллекция не была инициализирована |
NO_DATA_FOUND |
Индекс ссылается на ранее удаленный элемент коллекции |
SUBSCRIPT_BEYOND_COUNT |
Индекс больше, чем количество элементов в коллекции |
SUBSCRIPT_OUTSIDE_LIMIT |
Индекс не принадлежит допустимому диапазону значений индекса |
VALUE_ERROR |
Значение индекса равно NULL или не может быть преобразовано в целое |
Исключительная ситуация не инициируется, если для процедуры DELETE в качестве параметра передан индекс, равный NULL, а также при указании индекса ранее удаленного элемента в случае его замещения.
NULL.
Для объявления %ROWTYPE.
Объявление нового типа
TYPE type_name IS RECORD (field_declaration [, field_declaration]...);
field_declaration ) указывается как:
field_name field_type
[[NOT NULL] {:= | DEFAULT} expression]
Параметр type_name задает имя определяемого типа; field_type указывает тип REF CURSOR ; expression определяет значение
Как и для коллекций, для создания RECORD, а затем объявить
Тип TABLE и VARRAY.
Для доступа к любому record_name.field_name. Если field_name также является record_name.field_name.field1_name и т.д.
В выражениях языка PL/SQL выполнять присваивание значения можно как отдельно
Выполнять присвоение значения всей
INTO -переменной в SQL-операторе SELECT или FETCH.Например:
DECLARE
- Определение типа
TYPE T_rec IS RECORD (
f1 tbl1.f1%TYPE,
f2 VARCHAR2(15),
f3 REAL(7,2));
- Тип на основе строки таблицы
rec3 tbl1%ROWTYPE;
- Объявление записи
rec1 T_rec;
f_sum1 REAL;
FUNCTION sum_f3 (n INTEGER)
RETURN T_rec IS
rec2 T_rec;
BEGIN
- :
- Функция возвращает значение
- типа запись
RETURN rec2;
END;
BEGIN
- Вызов функции
rec1 := sum_f3(4);
f_sum1 := sum_f3(4).f3;
SELECT * INTO rec3 FROM tbl1
WHERE f1 = 1;
END;
Для получения официальных документов о завершении программы дополнительного профессионального образования (удостоверения о повышении квалификации, дипломов о профессиональной переподготовке и MBA) необходимо предоставить:
Внимание! Вы можете не заказывать доставку бумажной версии официального документы, а скачать его в электронном виде и распечатать самостоятельно. Информация о выданном документе в течение 1 месяца загружается в Федеральную информационную систему «Федеральный реестр сведений о документах об образовании и (или) о квалификации, документах об обучении» - ФИС ФРДО.
Доступ на новый сайт осуществляется с использованием адреса электронной почты, который был указан вами при регистрации на "старом". Мы постарались перенести все ваши данные с прежнего ресурса, однако не исключена вероятность потери части информации.
При возникновении проблемы со входом, воспользуйтесь функцией сброса пароля
Если вы обнаружите несоответствия, пожалуйста, сообщите нам.