Стр. 15-1
Глава
15
Работа
с группами записей
Данная глава объясняет создание и манипулирование группами записей. Она
включает следующие разделы:
·
О группах
записей 15 - 2
·
Создание
групп записей во время разработки 15 -
4
·
Создание и
манипулирование группами записей во время выполнения 15 - 7
Стр. 15-2
О группах записей
Группа записей - это внутренняя структура данных Oracle Forms, имеющая
рабочее пространство в виде колонок/строк подобно таблице базы данных. Но в
отличие от таблиц базы данных группы записей - это отдельные объекты,
принадлежащие модулю формы, в котором они определены. Группа записей может
иметь неограниченное количество колонок типа CHAR, LONG, NUMBER или DATE, при
условии, что общее количество колонок не превышает 64К. Имена колонок группы
записей не могут превышать 30 символов.
Программно группы записей могут использоваться в тех случаях, когда
требуются возможности, предлагаемые двумерным массивом нескольких типов данных.
Группа записей, сконструированная из запроса, может хранить записи из базы
данных наподобие как в обзоре (view) базы данных, с тем дополнительным
преимуществом, что группа записей для Oracle Forms локальна, в отличие от
существующих в базе данных. А также, оператор SELECT, используемый для создания
и заполнения группы записей, может конструироваться динамически во время
выполнения формы.
Типы групп записей
Групп записей имеется три: запросные группы записей, статические группы
записей и незапросные группы записей.
Запросная группа записей |
Запросная группа записей - это такая, которая имеет связанный с ней
оператор SELECT. Колонки запросной группы записей берут свои имена по
умолчанию, типы данных и размерность из колонок базы данных, на которые
делаются ссылки в операторе SELECT. Записи в запросной группе записей - это
строки, извлеченные запросом, связанным с этой группой записей. |
Незапросная группа записей |
Незапросная группа записей - это группа, не имеющая связанного с ней
запроса, но структура и значения которой могут изменяться программно во время
выполнения формы. |
Статическая группа записей |
Статическая группа записей не связана с запросом; вместо этого вы во
время проектирования определяете ее структуру и значения строк, и они во
время выполнения формы остаются фиксированными. |
Во время проектирования вы можете создавать запросные и статические группы
записей. Во время выполнения формы вы можете программно создавать запросные и
незапросные группы записей.
Стр. 15-3
Когда вы создаете группу записей, вы явно не указываете ее тип. Тип
определяется когда вы создаете группу
записей (во время проектирования или программно во время выполнения), и тем,
как вы определите группу.
Значения групп записей
Действительные значения в группе записей поступают из трех источников:
·
исполнение
оператора SELECT, который вы связали с группой записей во время проектирования
(запросная группа записей)
·
массив
статических значений, который вы связали с группой записей во время
проектирования (статическая группа записей)
·
присвоение во
время выполнения формы посредством исполнения встроенных подпрограмм,
динамически заполняющих группу записей (запросная и незапросная группы)
Группы записей и списки значений
Каждый список значений (LOV) связан с определенной
группой записей. LOV - это объект интерфейса, позволяющий операторам просматривать,
прокручивать и выбирать записи, хранимые в низлежащей группе записей. Когда во
время проектирования вы определяете LOV, вы должны указать группу записей, на
которой будет основываться этот LOV.
Во время выполнения формы вы можете программно замещать группу записей LOV
по умолчанию другой группой записей. Например, вы можете создать программно
вторую группу и затем для динамического изменения свойства LOV Group_Name
вызвать SET_LOV_PROPERTY.
При создании LOV вы можете также прямо из диалогового окна Create LOV
создать низлежащую группу записей. Дополнительную информацию см. в Главе 14
“Создание списков значений (LOV)”.
Стр. 15-4
Создание групп записей во время проектирования
Создание группы записей во время проектирования начинается с ее создания в
Навигаторе, а затем она определяется в окне Properties. Группы записей могут
также создаваться во время выполнения формы исполнением соответствующих
встроенных подпрограмм из триггера или программы с именем пользователя.
Данный раздел описывает то, как создать запросную и статическую группы
записей, определяя их в во время проектирования в окне Properties.
Дополнительную информацию о создании группы записей во время выполнения см. в
разделе “Программное управление”. За информацией о создании незапросных групп
записей обратитесь к разделу “Создание и манипулирование группами записей во
время выполнения” далее в этой главе.
Чтобы создать запросную группу
записей:
1.
Находясь в
Навигаторе, создайте группу записей.
Для создания группы записей выберите в Навигаторе узел Record Groups и
затем выберите Navigator->Create.
Появляется диалоговое окно New Record Group.
2.
Выберите
Based on the Query Below и затем введите в поле Query Text оператор SELECT.
Дизъюнкт WHERE для оператора SELECT может включать в себя ссылки на глобальные
переменные и параметры формы.
3.
Выберите ОК.
Oracle Forms проверяет оператор SELECT и покидает диалоговое окно.
Примечание: Новая группа записей еще не имеет строк. Строки
возвращаются во время выполнения формы запросом, связанным с этой группой:
·
Вы можете
программно исполнять запрос, связанный с запросной группой записей, вызывая
встроенную подпрограмму POPULATE_GROUP. См. раздел “Программное управление”
далее в этой главе.
·
Если на
запросной группе записей основывается LOV, то Oracle Forms исполняет запрос,
связанный с этой группой записей, при каждом вызове LOV; то есть при выводе
LOV, или когда Oracle Forms необходимо проверить на допустимость элемент
текста, свойство Use LOV for Validation которого установлено на True.
Стр. 15-5
Чтобы просмотреть структуру вашей
группы записей:
1.
В окне
Properties дважды щелкните на свойстве Column Specification.
Появляется диалоговое окно Query Record Group Column Specification и
выводит в текстовом списке Column Name имена выбранных колонок.
Поля Data Type и Length выводят атрибуты текущей выбранной в списке Column
Name колонки.
Совет: Чтобы просмотреть атрибуты другой колонки,
выберите эту колонку в списке. Значения длины выводятся только для колонок
CHAR, для колонок NUMBER и DATE Oracle Forms использует длины ORACLE по
умолчанию для этих типов данных и отключает поле свойства Length.
Чтобы изменить оператор SELECT для
запросной группы записей:
1.
Находясь в
Навигаторе, выберите нужную группу записей.
В окне Properties измените нужным образом текст оператора SELECT в Record
Group Query.
Совет: Если вы изменяете оператор SELECT для группы
записей, на которой основывается существующий LOV, то вам может понадобиться
обновить определение этого LOV, чтобы определения колонок LOV соответствовали
новым колонкам группы записей.
Стр. 15-6
Чтобы создать статическую группу
записей:
1.
Находясь в
Навигаторе, создайте группу записей.
Для создания группы записей выберите в Навигаторе узел Record Groups и
затем выберите Navigator->Create.
Появляется диалоговое окно New Record Group.
2.
Выберите
Static Values и затем выберите ОК.
Появляется диалоговое окно Column Specification.
3.
В списке
Column Name введите имена колонок для группы записей в нужном порядке.
4.
Установите
тип данных и длину каждой колонки.
Поля Data Type и Length выводят атрибуты текущей выбранной колонки в списке
Column Name. Чтобы установить атрибуты другой колонки, выберите ее в списке.
Совет: Длины необходимо указывать только для колонок
CHAR и LONG. Для колонок NUMBER и DATE Oracle Forms использует ширину ORACLE
для этих типов данных по умолчанию, и поле Length отключается.
5.
Введите
значение для каждой ячейки в группе записей, выбирая нужную колонку в списке
Column Name, и затем вводя нужные значения в списке Column Value.
Обеспечьте, чтобы длина каждой колонки была не уже, чем самое длинное
значение, вводимое вами в этой колонке. Неудача в установке длины колонки
приводит к нулевой длине, и любые введенные вами в эту колонку значения будут в
группе записей недоступны.
6.
Для согласия
с определением группы записей выберите ОК.
Стр. 15-7
Создание и манипулирование группами записей во время выполнения
Предыдущие разделы описывали создание запросных и статических групп записей
определением их во время проектирования в Навигаторе и окне Properties. Данный
раздел объясняет программное создание и манипулирование группами записей.
Программно вы можете создавать запросные
и незапросные группы записей. Статические
группы записей программно создвать вы не можете.
Напомним, что запросная группа записей - это такая, которая имеет связанный
с ней оператор SELECT. Вы можете динамически заполнять запросную группу,
заставляя Oracle Forms исполнять запрос, связанный с этой группой в текущий
момент.
В отличие от запросной, незапросная группа не имеет связанного с ней
запроса. Для заполнения незапросной группы вы должны программно устанавливать
значения колонок в этой группе.
Создав программно группу, вы можете выполнять над этой группой следующие
операции:
·
изменять ее
структуру, добавляя колонки и строки
·
заполнять
группу
·
изменять
запрос, связанный с запросной группой
·
добавлять и
удалять строки
·
устанавливать
и получать значения колонок
·
помечать и
отменять пометки строк как “выбранные”
Строки групп записей внутренне пронумерованы (1, 2, 3 и т.д.) и операции
над отдельными строками и колонками должны обращаться к этим строкам по номеру
строки.
Встроенные подпрограммы для групп записей
Для программной работы с группами записей доступны следующие встроенные
подпрограммы:
Создание и удаление групп:
·
CREATE_GROUP
(функция)
·
CREATE_GROUP_FROM_QUERY
(функция)
·
DELETE_GROUP
(процедура)
Стр. 15-8
Изменение структуры группы:
·
ADD_GROUP_COLUMN
(функция)
·
ADD_GROUP_ROW
(процедура)
·
DELETE_GROUP_ROW
(процедура)
Заполнение групп:
·
POPULATE_GROUP (функция)
·
POPULATE_GROUP_WITH_QUERY (функция)
·
SET_GROUP_CHAR_CELL
(процедура)
·
SET_GROUP_DATE_
CELL (процедура)
·
SET_GROUP_NUMBER_
CELL (процедура)
Получение значений ячеек:
·
GET_GROUP_CHAR_CELL
(процедура)
·
GET_GROUP_DATE_
CELL (процедура)
·
GET_GROUP_NUMBER_
CELL (процедура)
Обработка строк:
·
GET_GROUP_ROW_COUNT (функция)
·
GET_GROUP_SELECTION_COUNT
(функция)
·
GET_GROUP_SELECTION
(функция)
·
RESET_GROUP_SELECTION
(процедура)
·
SET_GROUP_SELECTION
(процедура)
·
UNSET_GROUP_SELECTION
(процедура)
Функции идентификаторов объектов:
·
FIND_GROUP
(функция)
·
FIND_COLUMN
(функция)
Стр. 15-9
Ограничения для групп записей То, какие
подпрограммы допустимы для конкретной группы, определяет тип группы записей
(статическая, запросная или незапросная), и когда группа была создана (во время
проектирования или во время выполнения формы программно).
Например, вы не можете использовать функцию ADD_GROUP_COLUMN для группы
записей, созданной во время проектирования. Так же вы не можете использовать
процедуру ADD_GROUP_ROW для добавления строки в статическую группу записей.
Следующий раздел описывает типы групп записей, для которых действительна каждая
встроенная подпрограмма. Полную информацию о синтаксисе и границах действия вы
найдете в Oracle Forms Reference Manual,
Том 1.
Создание запросной группы записей
Для создания запросных групп записей используйте функцию
CREATE_GROUP_FROM_QUERY. Для вызова этой функции вы передаете оператор SELECT,
который должен быть связан с этой группой записей. Колонки в получающейся
группе соответствуют колонкам базы данных, на которые делается ссылка в
операторе SELECT.
Возвратное значение CREATE_GROUP_FROM_QUERY - идентификатор объекта новой
группы. Присвойте это возвратное значение переменной, объявленной как тип
Record Group (?).
Следующий пример создает четырехколоночную группу записей, основывающуюся
на двух таблицах базы данных - product
и inventory.
DECLARE
group_id RecordGroup;
query_ok NUMBER
BEGIN
/* создаем группу prod_group и присваиваем ее идентификатор
** переменной group_id */
group_id := Create_Group_From_Query(‘prod_group’,
‘SELECT product.id, product.name,
inventory.warehouse_id, inventory.amount_in_stock
FROM product, inventory
WHERE product.id = warehouse.product_id’);
/* теперь исполним запрос новой группы, используя переменную
** group_id для идентификации группы
*/
query_ok := Populate_Group(group_id);
/* если запрос неудачный, то прерываем этот триггер вызовом
** предварительно определенного исключения
*/
IF query_ok <> 0 THEN
RAISE Form_Trigger_Failure;
END IF;
END;
Стр.
15-10
Вызов CREATE_GROUP_FROM_QUERY создает группу, которая еще не имеет никаких
строк. Для заполнения группы вы должны явно испольнить связанный с ней запрос,
вызвав функцию POPULATE_GROUP. Возвратное значение функции POPULATE_GROUP будет
0, если запрос успешный, или номер ошибки ORACLE при неудаче.
Замещение запроса группы Вы можете
текущий запрос группы заместить новым запросом, вызвав функцию
POPULATE_GROUP_WITH_QUERY.
Колонки, на которые ссылается новый запрос, должны иметь такую же
структуру, как и в текущем запросе этой группы. То есть, вызывая
POPULATE_GROUP_WITH_QUERY, вы не можете изменять структуру колонок группы
записей.
Например, вы можете заместить запрос группы, если хотите изменить дизъюнкты
по умолчанию WHERE и ORDER BY. Следующий пример изменяет запрос, связанный с
группой записей из предыдущего примера, добавляя дополнительное ограничение на
то, что все строки изделий должны иметь amount_in_stock больше 10:
IF (Populate_Group_With_Query
(‘prod_group’,
‘SELECT product.id, product.name,
inventory.warehouse_id,
inventory.amount_in_stock
FROM product, inventory
WHERE product.id = warehouse.product_id
AND inventory.amount_in_stock > 10’))
<> 0 THEN
RAISE form_trigger_failure;
END IF;
Функция POPULATE_GROUP_WITH_QUERY возвращает 0, если запрос успешный, или
номер ошибки ORACLE при неудаче.
Новый запрос остается связанным с этой группой записей и вы можете его
исполнять последующими вызовами функции POPULATE_GROUP.
Стр.
15-11
Заполнение запросной группы во время
выполнения формы Если вы создаете и манипулируете запросами
групп программно, то вы несете ответственность за одновременность значений в
группе и в базе данных. Помните, что строки в запросной группе обладают
новизной последнего вызова POPULATE_GROUP или POPULATE_GROUP_WITH_QUERY.
Создание незапросной группы записей
Для создания незапросной группы записей пользуйтесь функцией CREATE_GROUP.
Так как функция CREATE_GROUP создает группу без колонок или строк, за ней
обычно следуют вызовы функций ADD_GROUP_COLUMN и ADD_GROUP_ROW.
CREATE_GROUP - это функция, возвращающая внутренний идентификатор новой
группы. ADD_GROUP_COLUMN возвращает идентификатор новой колонки. Если вы
присвоите эти идентификаторы переменным типа Record Group и Group Column, то
сможете обращаться к ним в последующих действиях.
Следующий пример создает группу записей по имени my_group.
DECLARE
group_id RecordGroup;
col1_id GroupColumn;
col2_id GroupColumn;
col3_id GroupColumn;
BEGIN
/* Создаем незапросную группу с именем my_group и присваиваем ее
** идентификатор переменной group_id.
*/
group_id := Create_Group(‘my_group’);
/* Добавляем в новую группу три колонки, используя для идентификации
** группы переменную group_id. Первые две колонки типа CHAR_COLUMN и
** их длина должна определяться.
** Третья типа NUMBER_COLUMN и параметр длины не принимает
*/
col1_id :=
Add_Group_Column(group_id,’col1’,CHAR_COLUMN,50);
col2_id :=
Add_Group_Column(group_id,’col2’,CHAR_COLUMN,50);
col3_id :=
Add_Group_Column(group_id,’col3’,NUMBER_COLUMN);
END;
Получается трехколоночная незапросная группа, не содержащая еще строк.
Процедура добавления строк в группы записей объясняется в разделе “Добавление
строк в группу” далее в этой главе. Добавив в группу строку, вы можете
программно установить значения ее колонок.
Стр. 15-12
Заполнение незапросной группы
записей Предыдущий раздел описывал использование
функции POPULATE_GROUP_WITH_QUERY для замещения текущего запроса группы
записей. Вы можете также использовать POPULATE_GROUP_WITH_QUERY для заполнения
незапросной группы. Такое действие связывает обозначенный запрос с этой группой
и преобразует таким образом незапросную группу в запросную. Колонки базы
данных, к которым обращается новый запрос, должны соответствовать колонкам в
группе записей.
Например, вы можете построить незапросную группу записей, имеющую
соответствующие колонки, и затем вызвать POPULATE_GROUP_WITH_QUERY для
связывания запроса с этой группой.
Изменение существующей группы записей
Данный раздел описывает изменение структуры существующей группы записей
выполнением следующих действий:
·
добавление
строк в группу
·
удаление
строк из группы
·
добавление
колонок в группу
·
удаление
группы
Добавление строк в группу записей Для
добавления строк в группу используйте процедуру ADD_GROUP_ROW. При вызове
ADD_GROUP_ROW вы указываете, где вы хотите вставить новую строку или передачей
номера строки, или указанием, что строка должна быть помещена в конце всех
существующих строк.
Чтобы вставить новую строку в конкретную позицию, передайте необходимый
номер строки:
Add_Group_Row(‘my_group’,3);
Чтобы добавить новую строку в конце всех существующих строк, для указания
размещения используйте константу END_OF_GROUP:
Add_Group_Row(‘my_group’,END_OF_GROUP);
Во вновь добавленной строке значения колонок по умолчанию NULL. Чтобы
установить значения отдельных колонок, используйте процедуру, соответствующую
типу данных ячейки:
·
SET_GROUP_CHAR_CELL
(Используйте также для колонок LONG)
·
SET_GROUP_DATE_CELL
·
SET_GROUP_NUMBER_CELL
Стр.
15-13
Следующий пример добавляет строку в конце группы my_group и затем устанавливает значения каждой ячейки в новой
строке:
DECLARE
group_id RecordGroup
:= Find_Group(‘my_group’);
total_rows NUMBER;
new_row NUMBER;
BEGIN
/* выясняем сколько строк имеется в группе сейчас */
total_rows := Get_Group_Row_Count(group_id);
/* добавляем строку в конце группы my_group
*/
Add_Group_Row(group_id,END_OF_GROUP);
/* выполняем приращение total_rows для получения номера новой строки */
new_row := total_rows + 1;
/* устанавливаем в новой строке значения колонок 1,2 и 3 */
Set_Group_Char_Cell(‘my_group.col1’,new_row,’xyz
company’);
Set_Group_Char_Cell(‘my_group.col2’,new_row,’district
12’);
Set_Group_Number_Cell(‘my_group.col3’,new_row,400);
END;
Примечание: В статическую группу записей вы не можете
добавлять строки программно.
Удаление строки из группы записей Для
удаления строк из существующих групп пользуйтесь процедурой DELETE_GROUP_ROW.
Следующий пример удаляет третью строку в группе по имени prod_group:
Delete_Group_Row(‘prod_group’,3);
Для удаления всех строк передайте константу ALL_ROWS:
Delete_Group_Row(‘prod_group’,ALL_ROWS);
Примечание: Вы не можете удалять строки из статической
группы записей.
Добавление колонок в группы записей Для
добавления новой колонки в существующую группу записей пользуйтесь процедурой
ADD_GROUP_COLUMN. Группа записей, в которую добавляется колонка, должна
отвечать следующим критериям:
·
Группа должна
быть запросной или незапросной, созданной программно (вы не можете добавлять
колонки в группы, созданные во время проектирования).
·
Группа не
может в текущий момент содержать никаких строк.
Стр.
15-14
Следующий пример добавляет колонку в запросную группу записей, созданную
вызовом CREATE_GROUP_FROM_QUERY и имеющей в текущий момент строки, возвращенные
этим запросом:
DECLARE
query_ok NUMBER;
BEGIN
/* Это запросная группа, имеющая строки от предыдущего вызова
** Populate_Group, поэтому сначала удалим все ее строки
*/
Delete_Group_Row(‘prod_group’,ALL_ROWS);
/* Теперь добавим в эту группу колонку типа DATE_COLUMN */
Add_Group_Column(‘prod_group’,’restock_date’,DATE_COLUMN);
/* Структура в старом запросе группы больше не действительна, поэтому
** заместим этот запрос новым и заполним группу
*/
query_ok :=
Populate_Group_With_Query(‘prod_group’,
‘SELECT product.id, product.name,
inventory.warehouse_id,
inventory.amount_in_stock, inventory.restock_date
FROM product,
inventory WHERE product.id =
warehouse.product_id’);
/* если запрос неудачный, то прерываем этот триггер, вызывая
** предварительно определенное исключение
*/
IF query_ok <> 0 THEN
RAISE Form_Trigger_Failure;
END IF;
END;
Заметьте, что когда вы добавляете колонку в запросную группу записей, вы
должны также текущий запрос группы заместить новым, который выбирает значения в
новую колонку.
Удаление группы записей Для
удаления группы записей, созданной программно, используйте процедуру
DELETE_GROUP:
Delete_Group(‘prod_group’);
Примечание: Вы не можете удалять группу, созданную во время
проектирования.
Стр.
15-15
Операции над строками
Создав и заполнив группу записей, вы можете над ее строками выполнять
следующие операции:
·
подсчитывать
количество строк в группе
·
устанавливать
значения отдельных ячеек
·
получать
текущее значение отдельных ячеек
·
помечать
строки как “выбранные” и затем подсчитывать и извлекать выбранные строки
Выполняя операции над строками, вы должны их идентифицировать по номеру
строки. Например, чтобы получить значение ячейки, вы должны обратиться к этой
ячейке по номеру строки и имени колонки.
Подсчет количества строк в группе
записей Вы можете получать количество строк в группе
записей с помощью функции GET_GROUP_ROW_COUNT. Следующий пример сначала
исполняет запрос, связанный с запросной группой по имени my_group, затем
присваивает переменной row_count количество строк, возвращенных этим запросом:
DECLARE
group_id RecordGroup;
query_ok NUMBER;
row_count NUMBER;
BEGIN
query_ok := Populate_Group(‘my_group’);
row_count := Get_Group_Row_Count(group_id);
END;
Функция GET_GROUP_ROW_COUNT может использоваться для определения количества
итераций, которое требуется для прохождения через все строки в данной группе:
DECLARE
group_id RecordGroup
:= FIND_GROUP(‘my_group’);
row_count NUMBER;
BEGIN
/* выясняем сколько строк в группе */
row_count := Get_Group_Row_Count(group_id);
/* устанавливаем колонку Status группы на ‘discontinued’ для всех
** строк с идентификатором изделия 471
*/
FOR j IN 1..row_count LOOP
IF Get_Group_Number_Cell(‘my_group.prod_id’,j) =
471 THEN
Set_Group_Char_Cell(my_group.status,j,’discontinued’);
END LOOP;
END;
Стр.
15-16
Получение и установка значений
строки и ячейки Вы можете получать и устанавливать значение
ячейки на пересечении определенной строки и колонки.
Для получения текущего значения колонки в определенной строке пользуйтесь
функцией, соответствующей типу данных этой ячейки:
·
GET_GROUP_CHAR_CELL
((Используйте также для колонок LONG)
·
GET_GROUP_DATE_CELL
·
GET_GROUP_NUMBER_CELL
Обращаясь к колонкам в группе записей, используйте полный синтаксис group_name.column_name. По иному вы
можете обращаться к колонкам по их внутренним идентификаторам объектов. Для
получения идентификатора конкретной колонки пользуйтесь функцией FIND_COLUMN.
Например, для получения текущего значения колонки amount_in_stock в третьей строке группы my_group вы можете написать следующее:
DECLARE
quantity NUMBER;
col_id GroupColumn
:=
Find_Column(‘my_group.amount_in_stock’);
BEGIN
quantity := Get_Group_Number_Cell(col_id,3);
END;
Для установки значения колонки в определенной строке пользуйтесь
процедурой, соответствующей типу данных ячейки:
SET_GROUP_CHAR_CELL
SET_GROUP_DATE_CELL
SET_GROUP_NUMBER_CELL
Следующий пример устанавливает значение колонки name на Lisa Jean в
первой строке группы по имени my_group.
Set_Group_Char_Cell(‘my_group.name,1,’Lisa Jean’);
Примечание: Вы не можете устанавливать значения ячеек в
статической группе записей.
Стр.
15-17
Пометка строк как выбранных При
выполнении операций над строками вы можете программно помечать строки как
выбранные. Выбор строки устанавливает на этой строке внутренний флаг, к
которому вы можете обращаться при последующих операциях.
·
Для пометки
строки как выбранной пользуйтесь процедурой SET_GROUP_SELECTION.
·
Для
определения количества выбранных строк в группе пользуйтесь функцией
GET_GROUP_SELECTION_COUNT.
·
Для получения
номера строки, помеченной как выбранная, пользуйтесь функцией
GET_GROUP_SELECTION.
·
Для отмены
пометки выбранной строки пользуйтесь функцией UNSET_GROUP_SELECTION.
·
Для отмены
выбора всех выбранных в текущий момент строк в группе пользуйтесь процедурой
RESET_GROUP_SELECTION.
Следующий триггер проходит по циклу через все строки в группе orders. Если дата, хранимая в колонке date_ordered, меньше 1980, то строка
помечается как выбранная:
DECLARE
group_id Record_Group
:= FIND_GROUP(‘orders’);
row_count NUMBER;
old_orders NUMBER;
BEGIN
/* определяем сколько имеется заказов */
row_count := Get_Group_Row_Count(group_id);
/* если заказ старше, чем 1980, помечаем его для выбора */
FOR j IN 1,,row_count LOOP
IF Get_Group_Date_Cell(‘orders.date_ordered’,j)
<
‘01-JAN-80’ THEN
Set_Group_Selection(group_id,j);
END IF;
END LOOP;
/* подсчитываем общее количество старых заказов */
old_orders := Get_Group_Selection_Count(group_id);
END;
Функция GET_GROUP_SELECTION возвращает номер строки указанной выбранной
строки. Например, если выбраны строки 6, 11 и 18, то они соответственно
представляют выбор 1, 2 и 3.
Таким образом, если в группе выбрано три строки, то номер строки второй
выбранной строки возвращает следующая функция:
row_num := Get_Group_Selection(‘my_group’,2);
Стр.
15-18
Следующий пример - процедура с именем kill_rows.
Эта процедура принимает параметр CHAR, позволяющий во время выполнения формы
передавать имя группы записей. Процедура удаляет все выбранные в текущий момент
строки в группе:
PROCEDURE kill_rows(group_name IN CHAR) IS
group_id Record_Group
:= Find_Group(‘group_name’);
counter NUMBER
:= 1;
marked_rows NUMBER;
BEGIN
/* определяем количество строк, помеченных как выбранные */
marked_rows :=
Get_Group_Selection_Count(group_id);
/* удаляем каждую строку, помеченную как выбранная */
WHILE counter <= marked_rows LOOP
Delete_Group_Row(group_id,
Get_Group_Selection(counter,1));
counter := counter + 1;
END LOOP;
END;
Встроенная подпрограмма DELETE_GROUP_ROW принимает параметр row_number,
указывающий строку для удаления. В этом примере функция GET_GROUP_SELECTION
возвращает номер строки обозначенной строки и вложена в качестве аргумента
row_number для процедуры DELETE_GROUP_ROW.