Передача ссылок с ограничениями
|
Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
ssa774 Профи
Вступление в Клуб: 30.11.2007
|
Чт Июн 06, 2013 12:36  Передача ссылок с ограничениями |
|
Полезность: Нет оценки
|
Коллеги, добрый день!
Может кто сталкивался, как передать с пользователя все ссылки, исключая некоторые типы, допустим, кадровую и зарплатную информацию?
Цель создать нового пользователя и перетащить с существующего все, кроме ЗП и кадров.
Знаю про операцию Система - Передача ссылок одного объекта другому, но код процедуры method_mgr.clear_object_refcing закрыт. |
|
 |
Alexsey Эксперт
Вступление в Клуб: 06.09.2007
|
Чт Июн 06, 2013 13:37   |
|
Полезность: 2
|
Я в свое время для себя писал процедуру по передаче ссылок.
главное из курсора выкинуть таблицы которых быть не должно в передаче.
Код: | procedure clear_object_refcing(obj_id_ varchar2, p_class varchar2 default null, p_new_id varchar2 default null) is
v_class varchar2(16);
v_objid varchar2(128);
v_part varchar2(30);
v_table varchar2(100);
i integer;
begin
v_objid := obj_id_;
v_class := rtl.get_class(v_objid,p_class,'CLEAR_OBJECT_REFCING');
[RTL].read(null);
valmgr.check_readonly;
for (
select distinct ct(ctc.column_name :column_name
,ctc.qual :qual
,ct.table_name :table_name
,ct.class_id :class_id
,ct.param_group :param_group
,ct.current_key :current_key)
in class_tables%rowtype
,(class_tab_columns%rowtype :ctc)
,(class_relations%rowtype :cr)
,(classes%rowtype :cl)
where cr.child_id = v_class
and ctc.target_class_id = cr.parent_id
and ctc.base_class_id = 'REFERENCE'
and ctc.column_name is not null
and ctc.deleted = '0'
and ctc.flags is null
and ct.class_id = ctc.class_id
and ct.class_id = cl.id
-- список исключаемых классов
and ((cl.parent_id not in (::[DOCUMENT]%class, ::[REPS_DATA]%class) or cl.parent_id is null)
and cl.id not in(::[RECORDS]%class, , ::[F_102_LINK]%class, ::[HOZ_OP_ACC]%class))
)
loop
v_part := null;
v_table:= ct.table_name;
if ct.param_group='PARTITION' then
if storage_mgr.prt_actual then
v_table:= v_table||' PARTITION('||v_table||'#0)';
elsif ct.current_key>0 then
v_part := ' AND KEY>='||ct.current_key;
end if;
end if;
begin
execute immediate 'UPDATE '||v_table||' SET '||ct.column_name || '=:NEW WHERE '
||ct.column_name||'=:OBJ'||v_part
using p_new_id,v_objid;
execute immediate 'i := sql%rowcount';
exception when others then i:=-abs(sqlcode);
end;
if i>=0 then
storage_utils.ws(message.gettext('EXEC', 'REFERENCES_UPDATED', ct.class_id, ct.qual, i));
else
storage_utils.ws(message.gettext('EXEC', 'REFERENCES_UPDATE_FAILED', ct.class_id, ct.qual, i));
end if;
end loop;
end; |
Хочу отметить, что данная процедура не меняет ссылки на объекты а справочнике "Настройки." из-за специфики хранения объектов, поэтому надо будет там все равно менять руками
Посмотрите, может поможет. _________________ всегда есть как минимум 2 выхода |
|
 |
|
|
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах
|
|