CftClub.ru
Клуб специалистов ЦФТ-Банк

Передача ссылок с ограничениями

 
Ответить на тему    Клуб специалистов ЦФТ-Банк (IBSO) -> Разработка в PL/PLUS. Оптимизация запросов Oracle
Предыдущая тема :: Следующая тема  
Автор Сообщение
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 выхода
Показать сообщения:   
Ответить на тему    Клуб специалистов ЦФТ-Банк (IBSO) -> Разработка в PL/PLUS. Оптимизация запросов Oracle Часовой пояс: GMT + 3
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Рейтинг@Mail.ru