Если зарегистрировать 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 в стандартные таблицы.