
Если зарегистрировать view в OEBS, указав следующие столбцы
- START_DATE_ACTIVE
- END_DATE_ACTIVE
- ENABLED_FLAG
, то при использовании данной view в наборе значений автоматически будут отсекаться устаревшие данные.
Для регистрации view в OEBS, используем следующий скрипт.
--------------------------------------------------------------------
-- Зарегистрировать view
PROCEDURE reg_view(p_appl_name VARCHAR2, -- код приложения
p_view_name VARCHAR2, -- имя view
p_description VARCHAR2 -- описание view
);
--------------------------------------------------------------------
-- Зарегистрировать view
PROCEDURE reg_view(p_appl_name VARCHAR2, /* код приложения */
p_view_name VARCHAR2, /* имя view */
p_description VARCHAR2 /* описание view */
)
IS
l_appl_id number;
l_view_id number;
l_mess varchar2(4000);
l_marker number; /* для отладки */
g_no_validate_parameters exception;
-- добавление колонки
procedure add_column(p_name_column varchar2, p_seq varchar2) is
l_count number;
begin
-- проверка на существование столбца
select count(1) into l_count
from fnd_view_columns t
where t.view_id = l_view_id
and t.column_name = p_name_column;
-- если не существует, то вставляем данные
if (l_count = 0) then
insert into fnd_view_columns
(application_id,
view_id,
column_sequence,
column_name,
last_updated_by,
last_update_date,
last_update_login,
creation_date,
created_by)
values
(l_appl_id,
l_view_id,
p_seq,
p_name_column,
fnd_global.user_id,
sysdate,
fnd_global.login_id,
sysdate,
fnd_global.user_id);
end if;
end;
BEGIN
l_marker := 10;
-- Validate Application
begin
select A.APPLICATION_ID
into l_appl_id
from FND_APPLICATION A
where A.APPLICATION_SHORT_NAME = p_appl_name;
exception
when no_data_found then
l_mess := 'Некорректный код приложения';
raise g_no_validate_parameters;
end;
l_marker := 20;
-- проверка на существование view
begin
select VIEW_ID into l_view_id
from fnd_views
where application_id = l_appl_id
and VIEW_NAME = p_view_name;
exception
when no_data_found then
l_view_id := -1;
end;
l_marker := 30;
-- загружаем заголовок view
if (l_view_id = -1) then
insert into fnd_views
(application_id,
view_id,
view_name,
text,
description,
last_updated_by,
last_update_date,
last_update_login,
creation_date,
created_by)
values
(l_appl_id,
fnd_views_s.NEXTVAL,
p_view_name,
null,
p_description,
fnd_global.user_id,
sysdate,
fnd_global.login_id,
sysdate,
fnd_global.user_id) returning view_id into l_view_id;
else
update fnd_views set
DESCRIPTION = p_description,
LAST_UPDATED_BY = fnd_global.user_id,
LAST_UPDATE_DATE = sysdate,
LAST_UPDATE_LOGIN = fnd_global.login_id
where APPLICATION_ID = l_appl_id
and view_id = l_view_id;
end if;
-- загружаем столбцы view
add_column('START_DATE_ACTIVE', '10');
add_column('END_DATE_ACTIVE', '20');
add_column('ENABLED_FLAG', '30');
EXCEPTION
WHEN g_no_validate_parameters THEN
print('Error: '||l_mess);
RAISE;
WHEN others THEN
print('EXCEPTION ' || SQLERRM || '; l_marker = '||l_marker);
RAISE;
END;

Очень полезно, спасибо!
На My Oracle Support нашел информацию, что вопреки официальному гайду можно использовать стандартный API ad_dd.register_table и для регистрации view. При этом поля START_DATE_ACTIVE, END_DATE_ACTIVE, ENABLED_FLAG тоже будут нормально распознаваться в наборах значений (тестировал на R11). ID документа в MOS: 338777.1. Есть, конечно, минусы, что view будет забита в системе как таблица, зато можно избежать прямых insert в стандартные таблицы.