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

Доступ к значению реквизита ТБП по номеру
На страницу 1, 2  След.
 
Ответить на тему    Клуб специалистов ЦФТ-Банк (IBSO) -> Уроки ЦФТ-Банк для начинающих
Предыдущая тема :: Следующая тема  
Автор Сообщение
Матвеев Евгений
Профи


Вступление в Клуб: 31.01.2012
СообщениеВт Авг 18, 2015 08:50   Доступ к значению реквизита ТБП по номеру Ответить с цитатой
Полезность: Нет оценки
Есть ли возможность доступа к значению реквизита ТБП по номеру?
Что то вида %value('REQ_NAME'), только на вход порядковый номер реквизита внутри ТБП
vtar
Эксперт


Вступление в Клуб: 20.03.2009
СообщениеВт Авг 18, 2015 09:50    Ответить с цитатой
Полезность: Нет оценки
Евгений, а что имеется в виду под "номером", и какую задачу решаете ?

есть поле position в такой табличке

Код:

select * from CLASS_ATTRIBUTES where class_id = 'PR_CRED'  order by position


но у меня на схеме например, position не уникальный, есть дубли Sad
Матвеев Евгений
Профи


Вступление в Клуб: 31.01.2012
СообщениеВт Авг 18, 2015 10:08    Ответить с цитатой
Полезность: Нет оценки
vtar пишет:
Евгений, а что имеется в виду под "номером", и какую задачу решаете ?

есть поле position в такой табличке

Код:

select * from CLASS_ATTRIBUTES where class_id = 'PR_CRED'  order by position


но у меня на схеме например, position не уникальный, есть дубли Sad


Хотелось бы что то вида
for cur_req = 0 ... req_count loop
Save_log(ТБП.Значение реквизита(cur_req))
end loop

Для собственного ТБП нужно в определенный момент сохранять в лог значения всех реквизитов(они меняются регулярно)
Структура ТБП периодически меняется(номенклатура реквизитов)
vtar
Эксперт


Вступление в Клуб: 20.03.2009
СообщениеВт Авг 18, 2015 10:50    Ответить с цитатой
Полезность: Нет оценки
Матвеев Евгений пишет:
венного ТБП нужно в определенный момент сохранять в лог значения всех реквизитов(они меняются регулярно)
Структура ТБП периодически меняется(номенклатура реквизитов)


а чем журналирование реквизитов не устраивает ?
Матвеев Евгений
Профи


Вступление в Клуб: 31.01.2012
СообщениеВт Авг 18, 2015 11:27    Ответить с цитатой
Полезность: Нет оценки
vtar пишет:
Матвеев Евгений пишет:
венного ТБП нужно в определенный момент сохранять в лог значения всех реквизитов(они меняются регулярно)
Структура ТБП периодически меняется(номенклатура реквизитов)


а чем журналирование реквизитов не устраивает ?


Потому что в лог пишется значительный объем прочей информации, как составная часть данной информации должны быть значения реквизитов
Удобно когда всё это будет находится в одном месте
vtar
Эксперт


Вступление в Клуб: 20.03.2009
СообщениеВт Авг 18, 2015 12:10    Ответить с цитатой
Полезность: 2
Код:

begin
   for
   (   select c (   c.attr_id   : attr_id,
               c.name      : name )
         in class_attributes%rowtype
         where   c.class_id = this%classPARENT
         order by c.position
   )      
   loop
      debug_pipe('id= '||this||' ['||this%class||'.'||c.attr_id||'] = '||this%value(c.attr_id) ,0);
   end loop;
end;
Матвеев Евгений
Профи


Вступление в Клуб: 31.01.2012
СообщениеВт Авг 18, 2015 15:20    Ответить с цитатой
Полезность: Нет оценки
vtar пишет:
Код:

begin
   for
   (   select c (   c.attr_id   : attr_id,
               c.name      : name )
         in class_attributes%rowtype
         where   c.class_id = this%classPARENT
         order by c.position
   )      
   loop
      debug_pipe('id= '||this||' ['||this%class||'.'||c.attr_id||'] = '||this%value(c.attr_id) ,0);
   end loop;
end;


Попробовал на тестовой, какой то мелкий косячок мешает жить,
По какой то причине модификатор value при вызове над действительными именами реквизитов выпадает в ошибку, для примера ниже (кредиты)
this_cred%value(c.attr_id)

ОШИБКА!!! SQLCODE:<-20999> SQLERRM <ORA-20999: CLS-BAD_QUALIFIER: Неправильный квалификатор [TURNOVER], тип [PRODUCT]

ОШИБКА!!! SQLCODE:<-20999> SQLERRM <ORA-20999: CLS-BAD_QUALIFIER: Неправильный квалификатор [CLIENT_REQ], тип [PRODUCT]

ОШИБКА!!! SQLCODE:<-20999> SQLERRM <ORA-20999: CLS-BAD_QUALIFIER: Неправильный квалификатор [PRC_DEP_TURN], тип [PRODUCT]

Причем как то выборочно, для большинства имен реквизитов всё работает


debug('Начало...');
declare
this_cred ref [KRED_PERS] := this(this.first);

begin
for
( select c ( c.attr_id : attr_id,
c.name : name )
in class_attributes%rowtype
where c.class_id = this_cred%classPARENT
order by c.position
)
loop
begin
debug('id= '||this_cred||' ['||this_cred%class||'.'||c.attr_id||'] = '||nvl(this_cred%value(c.attr_id),'') ,0);
exception
when others all then
debug('ОШИБКА!!! SQLCODE:<'||SQLCODE||'> SQLERRM <'||sqlerrm);
end;
end loop;
end;
debug('Конец...');



Начало...
id= 254151660 [KRED_PERS.FT_CREDIT] = 43353
id= 254151660 [KRED_PERS.CLIENT] = 254087312
id= 254151660 [KRED_PERS.ACCOUNT] = 901705444
id= 254151660 [KRED_PERS.SUMMA_DOG] = 300000
id= 254151660 [KRED_PERS.ACC_DEBTS_PRC] = 901714742
id= 254151660 [KRED_PERS.ZALOG] = 254151663
id= 254151660 [KRED_PERS.ACC_RESERV] = 901708931
id= 254151660 [KRED_PERS.OPER_WAY_OUT] = 1984149
id= 254151660 [KRED_PERS.LIST_PAY] = 254151661
id= 254151660 [KRED_PERS.LIST_PLAN_PAY] = 254151662
id= 254151660 [KRED_PERS.ACC_DEBTS_CR] = 901711028
id= 254151660 [KRED_PERS.DIC_TYPE_CRED] = 2036186
id= 254151660 [KRED_PERS.LIST_PROL] = 254151666
id= 254151660 [KRED_PERS.VNB_EXCEED_PRC] =
id= 254151660 [KRED_PERS.GR_RISK_HIST] = 254151674
id= 254151660 [KRED_PERS.VNB_UNUSED_LINE] =
id= 254151660 [KRED_PERS.ACC_RESERV_DEBTS] = 901712503
id= 254151660 [KRED_PERS.ISSUE_VEK] =
ОШИБКА!!! SQLCODE:<-20999> SQLERRM <ORA-20999: CLS-BAD_QUALIFIER: Неправильный квалификатор [TURNOVER], тип [PRODUCT]
id= 254151660 [KRED_PERS.ACC_DEMAND_PRC] = 901738826
id= 254151660 [KRED_PERS.KIND_CREDIT] = 94139573
id= 254151660 [KRED_PERS.FOR_OPEN_PAY] =
id= 254151660 [KRED_PERS.FOR_OPEN_BOOL] = 0
id= 254151660 [KRED_PERS.OKOHX] =
id= 254151660 [KRED_PERS.ACC_SETTLEMENT] =
id= 254151660 [KRED_PERS.GEN_AGR] =
id= 254151660 [KRED_PERS.SUMMA_PAY] =
id= 254151660 [KRED_PERS.SOURCE] =
id= 254151660 [KRED_PERS.LIMIT_SALDO] =
id= 254151660 [KRED_PERS.DATE_GIVE] = 2014-01-10 00:00:00
id= 254151660 [KRED_PERS.HIGH_LEVEL_CR] =
id= 254151660 [KRED_PERS.NUM_CONTR] =
ОШИБКА!!! SQLCODE:<-20999> SQLERRM <ORA-20999: CLS-BAD_QUALIFIER: Неправильный квалификатор [CLIENT_REQ], тип [PRODUCT]
id= 254151660 [KRED_PERS.ONE_DAY] = 0
id= 254151660 [KRED_PERS.INVOICE] = 0
ОШИБКА!!! SQLCODE:<-20999> SQLERRM <ORA-20999: CLS-BAD_QUALIFIER: Неправильный квалификатор [PRC_DEP_TURN], тип [PRODUCT]
id= 254151660 [KRED_PERS.FOR_OPEN_FN] = 43353
id= 254151660 [KRED_PERS.DEBT_DOG_ARR] = 254151677
id= 254151660 [KRED_PERS.PARAM_FOR_PLAN] = 254151678
id= 254151660 [KRED_PERS.COPY_TO_TRANSH] = 0
id= 254151660 [KRED_PERS.DATE_PAYOUT_LTD] = 2014-01-10 00:00:00
id= 254151660 [KRED_PERS.PRJ_KIND_CRED] = 64410039
id= 254151660 [KRED_PERS.FOR_OPEN_YEAR] = 0
id= 254151660 [KRED_PERS.DATE_ENDING_MAX] =
id= 254151660 [KRED_PERS.RESERV_ACCS] = 254151679
id= 254151660 [KRED_PERS.PERIOD_UNIT] = 2052565
id= 254151660 [KRED_PERS.DEBTORS] = 254151680
id= 254151660 [KRED_PERS.EARLY_PAY] =
id= 254151660 [KRED_PERS.PROPERTIES] = 254151681
id= 254151660 [KRED_PERS.PLAN_HIST] = 254151682
id= 254151660 [KRED_PERS.VNB_DEMAND_PRC] =
id= 254151660 [KRED_PERS.CREDIT_BANKS] = 254151683
id= 254151660 [KRED_PERS.COMISS_ARR] = 254151684
id= 254151660 [KRED_PERS.OBJECTS_CRED] = 254151685
id= 254151660 [KRED_PERS.BANK_SWIFT] = 254151686
id= 254151660 [KRED_PERS.TO_BKI] = 254151687
id= 254151660 [KRED_PERS.CAUSE] = 254151688
id= 254151660 [KRED_PERS.OVER_ON_PROD] =
id= 254151660 [KRED_PERS.MAX_LIMIT_SALDO] =
id= 254151660 [KRED_PERS.DEBT_PRIORITY] = 254151689
id= 254151660 [KRED_PERS.CALENDAR_NAME] =
id= 254151660 [KRED_PERS.DEBT_DATE] = 2015-08-10 00:00:00
id= 254151660 [KRED_PERS.DEBT_PR_DATE] = 2015-07-15 00:00:00
id= 254151660 [KRED_PERS.DEBT_SUM] = 238299.61
id= 254151660 [KRED_PERS.DEBT_PR_SUM] = 0
id= 254151660 [KRED_PERS.DATE_EXCEED] = 2015-07-10 00:00:00
id= 254151660 [KRED_PERS.EXT_SUM] = 0
id= 254151660 [KRED_PERS.DATE_EXCEED_END] = 2015-07-15 00:00:00
id= 254151660 [KRED_PERS.DATE_CALC_MOP] =
id= 254151660 [KRED_PERS.IMPORT_CODE] =
id= 254151660 [KRED_PERS.CONNECT_CO_PROD] = 0
id= 254151660 [KRED_PERS.REASON_FOR_CLOSE] =
Конец...
vtar
Эксперт


Вступление в Клуб: 20.03.2009
СообщениеВт Авг 18, 2015 15:44    Ответить с цитатой
Полезность: 1
Матвеев Евгений пишет:
Попробовал на тестовой, какой то мелкий косячок мешает жить,
Конец...


да, есть такое.
Похоже, что падает на реквизитах верхнего родительского уровня (для PR_CRED родительский - PRODUCT) .

возможно, надо переписать select на иерархический обход от исходного ТБП до его последнего родителя и вычитывать последовательно реквизиты на своих типах:

KRED_PERS -> PR_CRED -> PRODUCT

Если будет время, попробую запилить ....
prankster
Профи


Вступление в Клуб: 22.08.2014
СообщениеВт Авг 18, 2015 16:05   Re: Доступ к значению реквизита ТБП по номеру Ответить с цитатой
Полезность: 1
Матвеев Евгений пишет:
Есть ли возможность доступа к значению реквизита ТБП по номеру?
Что то вида %value('REQ_NAME'), только на вход порядковый номер реквизита внутри ТБП


Развлечения ради написал какую-то ерунду Very Happy
Код:

   type type_used_cols is table of varchar2(1) index by varchar2(100);
   tblUsed   type_used_cols;
begin
   tblUsed.delete;
   for(
         select   x(
                  x.[COLUMN_NAME]            : c_col,
                  decode(   
                        x.[DATA_TYPE],
                        'NUMBER',   to_char(x.[COLUMN_NAME]),
                        'FLOAT',   to_char(x.[COLUMN_NAME]),
                        'DATE',      to_char(x.[COLUMN_NAME]),
                        'VARCHAR2',   x.[COLUMN_NAME],
                        'CHAR',      x.[COLUMN_NAME]
                  )                     : c_data,
                  x.[TABLE_NAME]            : c_tbl
                )
         in      all_tab_columns%rowtype
         where   x.[TABLE_NAME] in (   
                              select   c('Z#'||c.[ID])
                              in      classes%rowtype
                              connect by prior c.[PARENT_ID] = c.[ID]
                              start c.[ID] = this%class
                             )
            and   x.[OWNER] = 'IBS'
            and   x.[COLUMN_NAME] not in ('SN', 'SU')
            and   x.[DATA_TYPE] in ('NUMBER', 'VARCHAR2', 'DATE', 'CHAR', 'FLOAT')
         order by x.[TABLE_NAME]
   )loop
      if not tblUsed.exists(x.c_col) then
         declare
            sSql   varchar2(2000);
            sValue   varchar2(32767) default null;
         begin
            sSql   := 'select ' || x.c_data || ' from ibs.'||x.c_tbl||' where id = :1';
            execute immediate sSql into sValue using this%id;
            
            debug_pipe('::['||substr(x.c_tbl,3)||'].['||substr(x.c_col,3) ||'] = '||sValue,0);
         end;
         tblUsed(x.c_col)   := null;
      end if;
   end loop;
   
end;
vtar
Эксперт


Вступление в Клуб: 20.03.2009
СообщениеВт Авг 18, 2015 16:44    Ответить с цитатой
Полезность: 1
Мой код падает на реквизитах без экземпляров (структура, вариант).
В это случае, действительно непонятно, что писать в лог - по идее, структуру надо разворачивать по ее полям, т.к. нет экземпляра - нет значения Smile ...

Код:

begin
   
   for (select mc(mc.[PARENT]: mc_p, mc%id : mc_id) in ::[METACLASS] all
   connect by prior mc.[PARENT] = mc start mc = this%class) 
   
   loop
      debug_pipe('class id= '||mc.mc_id ,0);   
      for
      (   select c (   c.attr_id      : attr_id
                  ,c.name         : name
                  ,c.self_class_id : self_class
               )
            in class_attributes%rowtype
            where  c.class_id = mc.mc_id
            
      )      
      loop
         begin
            debug_pipe('id= '||this||' ['||mc.mc_id||'.'||c.attr_id||'] = '||this%value(c.attr_id) ,0);
         exception
            when others then
               debug_pipe(NL$||'ОШИБКА ! '||sqlerrm||' self_class='||c.self_class||NL$ ,0);   
               null;
         end;
      end loop;
      
   end loop;
   
   
end;
Матвеев Евгений
Профи


Вступление в Клуб: 31.01.2012
СообщениеВт Авг 18, 2015 16:52    Ответить с цитатой
Полезность: Нет оценки
vtar пишет:
Мой код падает на реквизитах без экземпляров (структура, вариант).
В это случае, действительно непонятно, что писать в лог - по идее, структуру надо разворачивать по ее полям, т.к. нет экземпляра - нет значения Smile ...

Код:

begin
   
   for (select mc(mc.[PARENT]: mc_p, mc%id : mc_id) in ::[METACLASS] all
   connect by prior mc.[PARENT] = mc start mc = this%class) 
   
   loop
      debug_pipe('class id= '||mc.mc_id ,0);   
      for
      (   select c (   c.attr_id      : attr_id
                  ,c.name         : name
                  ,c.self_class_id : self_class
               )
            in class_attributes%rowtype
            where  c.class_id = mc.mc_id
            
      )      
      loop
         begin
            debug_pipe('id= '||this||' ['||mc.mc_id||'.'||c.attr_id||'] = '||this%value(c.attr_id) ,0);
         exception
            when others then
               debug_pipe(NL$||'ОШИБКА ! '||sqlerrm||' self_class='||c.self_class||NL$ ,0);   
               null;
         end;
      end loop;
      
   end loop;
   
   
end;


На реквизитах без экземпляров (структура, вариант) достаточно выводить в лог прочерк или текст "Null"
Попробовать нужно
Матвеев Евгений
Профи


Вступление в Клуб: 31.01.2012
СообщениеВт Авг 18, 2015 17:54   Re: Доступ к значению реквизита ТБП по номеру Ответить с цитатой
Полезность: Нет оценки
prankster пишет:
Матвеев Евгений пишет:
Есть ли возможность доступа к значению реквизита ТБП по номеру?
Что то вида %value('REQ_NAME'), только на вход порядковый номер реквизита внутри ТБП


Развлечения ради написал какую-то ерунду Very Happy
Код:

   type type_used_cols is table of varchar2(1) index by varchar2(100);
   tblUsed   type_used_cols;
begin
   tblUsed.delete;
   for(
         select   x(
                  x.[COLUMN_NAME]            : c_col,
                  decode(   
                        x.[DATA_TYPE],
                        'NUMBER',   to_char(x.[COLUMN_NAME]),
                        'FLOAT',   to_char(x.[COLUMN_NAME]),
                        'DATE',      to_char(x.[COLUMN_NAME]),
                        'VARCHAR2',   x.[COLUMN_NAME],
                        'CHAR',      x.[COLUMN_NAME]
                  )                     : c_data,
                  x.[TABLE_NAME]            : c_tbl
                )
         in      all_tab_columns%rowtype
         where   x.[TABLE_NAME] in (   
                              select   c('Z#'||c.[ID])
                              in      classes%rowtype
                              connect by prior c.[PARENT_ID] = c.[ID]
                              start c.[ID] = this%class
                             )
            and   x.[OWNER] = 'IBS'
            and   x.[COLUMN_NAME] not in ('SN', 'SU')
            and   x.[DATA_TYPE] in ('NUMBER', 'VARCHAR2', 'DATE', 'CHAR', 'FLOAT')
         order by x.[TABLE_NAME]
   )loop
      if not tblUsed.exists(x.c_col) then
         declare
            sSql   varchar2(2000);
            sValue   varchar2(32767) default null;
         begin
            sSql   := 'select ' || x.c_data || ' from ibs.'||x.c_tbl||' where id = :1';
            execute immediate sSql into sValue using this%id;
            
            debug_pipe('::['||substr(x.c_tbl,3)||'].['||substr(x.c_col,3) ||'] = '||sValue,0);
         end;
         tblUsed(x.c_col)   := null;
      end if;
   end loop;
   
end;



prankster какая то ерунда работает в соответствии с начальной постановкой задачи
респект и уважуха

::[KRED_PERS].[] = 753156573
::[PRODUCT].[RES_OTHER_FIL] = 753156554
::[PRODUCT].[USER_TYPE] = 753156551
::[PRODUCT].[PER_COMISSIONS] = 753156552
::[PRODUCT].[INTERNAL_CODE] =
::[PRODUCT].[REPS_PRZ] = 753156553
::[PRODUCT].[PROD_INS_HISTORY] = 753156550
::[PRODUCT].[NUM_DOG_CLIENT] = 1
::[PRODUCT].[ADD_AGR_ARR] = 753156555
::[PRODUCT].[DOCUMENTS] = 753156556
::[PRODUCT].[CATEGORY_INFO] =
::[PRODUCT].[ASS_ID] = KRED_PERS
::[PRODUCT].[LLECTION_ID] =
::[PRODUCT].[ATE_ID] =
::[PRODUCT].[NUM_DOG] = 0277-ZKLSF-R-0000-13
::[PRODUCT].[DATE_BEGIN] = 10/09/13
::[PRODUCT].[DATE_BEGINING] = 25/09/14
::[PRODUCT].[DATE_CLOSE] =
::[PRODUCT].[DATE_ENDING] = 15/11/28
::[PRODUCT].[CREATE_USER] =
::[PRODUCT].[NOTES] =
::[PRODUCT].[COM_STATUS] = 2047879
::[PRODUCT].[ARRAY_SUM_DOG] = 753156546
::[PRODUCT].[ARRAY_DOG_ACC] = 753156547
::[PRODUCT].[FILIAL] = 1985880
::[PRODUCT].[ARRAY_OPER_DOG] = 753156549
::[PRODUCT].[DEPART] = 8935433
::[PR_CRED].[TURNOVER#NUM_INTERVALS] =
::[PR_CRED].[TURNOVER#UNIT_INTERVALS] =
::[PR_CRED].[ACC_DEMAND_PRC] =
::[PR_CRED].[KIND_CREDIT] = 86099109
::[PR_CRED].[FOR_OPEN_PAY] =
::[PR_CRED].[FOR_OPEN_BOOL] = 0
::[PR_CRED].[OKOHX] =
::[PR_CRED].[ACC_SETTLEMENT] =
::[PR_CRED].[GEN_AGR] =
::[PR_CRED].[SUMMA_PAY] =
::[PR_CRED].[SOURCE] =
::[PR_CRED].[LIMIT_SALDO] =
::[PR_CRED].[DATE_GIVE] = 25/09/14
::[PR_CRED].[HIGH_LEVEL_CR] =
::[PR_CRED].[NUM_CONTR] =
::[PR_CRED].[CLIENT_REQ#0] = 1
::[PR_CRED].[CLIENT_REQ#1#1] = 107106395
::[PR_CRED].[CLIENT_REQ#1#2] = 108337838
::[PR_CRED].[CLIENT_REQ#2#1] =
::[PR_CRED].[CLIENT_REQ#2#INN] =
::[PR_CRED].[CLIENT_REQ#2#2] =
::[PR_CRED].[CLIENT_REQ#2#3] =
::[PR_CRED].[CLIENT_REQ#2#FRIENDS] =
::[PR_CRED].[CLIENT_REQ#2#PART] =
::[PR_CRED].[CLIENT_REQ#2#KPP] =
::[PR_CRED].[ONE_DAY] = 0
::[PR_CRED].[INVOICE] = 0
::[PR_CRED].[FOR_OPEN_FN] = 43353
::[PR_CRED].[PRC_DEP_TURN#ACC_LIST] = 753156558
::[PR_CRED].[PRC_DEP_TURN#PRC_DEP_SCHEME] = 753156559
::[PR_CRED].[DEBT_DOG_ARR] = 753156560
::[PR_CRED].[PARAM_FOR_PLAN] = 753156561
::[PR_CRED].[COPY_TO_TRANSH] = 0
::[PR_CRED].[DATE_PAYOUT_LTD] =
::[PR_CRED].[FOR_OPEN_YEAR] = 0
::[PR_CRED].[PRJ_KIND_CRED] = 106833123
::[PR_CRED].[DATE_ENDING_MAX] =
::[PR_CRED].[RESERV_ACCS] = 753156562
::[PR_CRED].[PERIOD_UNIT] = 2052561
::[PR_CRED].[DEBTORS] = 753156563
::[PR_CRED].[EARLY_PAY] =
::[PR_CRED].[PROPERTIES] = 753156564
::[PR_CRED].[PLAN_HIST] = 753156565
::[PR_CRED].[VNB_DEMAND_PRC] = 805966222
::[PR_CRED].[CREDIT_BANKS] = 753156566
::[PR_CRED].[COMISS_ARR] = 753156567
::[PR_CRED].[OBJECTS_CRED] = 753156568
::[PR_CRED].[BANK_SWIFT] = 753156569
::[PR_CRED].[TO_BKI] = 753156570
::[PR_CRED].[CAUSE] = 753156571
::[PR_CRED].[OVER_ON_PROD] =
::[PR_CRED].[MAX_LIMIT_SALDO] =
::[PR_CRED].[DEBT_PRIORITY] = 753156572
::[PR_CRED].[CALENDAR_NAME] =
::[PR_CRED].[DEBT_DATE] = 15/07/15
::[PR_CRED].[DEBT_PR_DATE] = 15/07/15
::[PR_CRED].[DEBT_SUM] = 2426596.06
::[PR_CRED].[DEBT_PR_SUM] = 38592.25
::[PR_CRED].[DATE_EXCEED] = 16/06/14
::[PR_CRED].[EXT_SUM] = 532878.83
::[PR_CRED].[DATE_EXCEED_END] =
::[PR_CRED].[DATE_CALC_MOP] =
::[PR_CRED].[CONNECT_CO_PROD] = 0
::[PR_CRED].[IMPORT_CODE] =
::[PR_CRED].[REASON_FOR_CLOSE] =
::[PR_CRED].[FT_CREDIT] = 43353
::[PR_CRED].[CLIENT] = 107106395
::[PR_CRED].[ACCOUNT] = 753157483
::[PR_CRED].[SUMMA_DOG] = 2500000
::[PR_CRED].[ACC_DEBTS_CR] = 753157512
::[PR_CRED].[ACC_DEBTS_PRC] =
::[PR_CRED].[ACC_RESERV] = 770391576
::[PR_CRED].[LIST_PAY] = 753156543
::[PR_CRED].[LIST_PLAN_PAY] = 753156544
::[PR_CRED].[OPER_WAY_OUT] = 1984150
::[PR_CRED].[ZALOG] = 753156545
::[PR_CRED].[DIC_TYPE_CRED] = 2036186
::[PR_CRED].[LIST_PROL] = 753156548
::[PR_CRED].[VNB_EXCEED_PRC] = 805966252
::[PR_CRED].[GR_RISK_HIST] = 753156557
::[PR_CRED].[VNB_UNUSED_LINE] =
::[PR_CRED].[ACC_RESERV_DEBTS] = 770391605
::[PR_CRED].[ISSUE_VEK] =
Матвеев Евгений
Профи


Вступление в Клуб: 31.01.2012
СообщениеСр Авг 19, 2015 09:12    Ответить с цитатой
Полезность: Нет оценки
Коллеги, попутный мелкий вопрос
Можно вариант prankster а завернуть в универсальную функцию, для последующей передачи ссылки на любой класс ТБП?
prankster
Профи


Вступление в Клуб: 22.08.2014
СообщениеСр Авг 19, 2015 10:59    Ответить с цитатой
Полезность: 1
Матвеев Евгений пишет:
Коллеги, попутный мелкий вопрос
Можно вариант prankster а завернуть в универсальную функцию, для последующей передачи ссылки на любой класс ТБП?

Код:
procedure log_obj(p_obj number, p_class varchar2)
is
   type type_used_cols is table of varchar2(1) index by varchar2(100);
   tblUsed   type_used_cols;
begin
   if p_obj is null or p_class is null then
      pragma error('Не указан объект или его класс.');
   end if;
   tblUsed.delete;
   for(
         select   x(
                  x.[COLUMN_NAME]            : c_col,
                  decode(
                        x.[DATA_TYPE],
                        'NUMBER',      'to_char('||x.[COLUMN_NAME]||')',
                        'FLOAT',      'to_char('||x.[COLUMN_NAME]||')',
                        'DATE',      'to_char('||x.[COLUMN_NAME]||')',
                        'VARCHAR2',   x.[COLUMN_NAME],
                        'CHAR',         x.[COLUMN_NAME]
                  )                        : c_data,
                  x.[TABLE_NAME]           : c_tbl
                )
         in      all_tab_columns%rowtype
         where   x.[TABLE_NAME] in (
                              select   c('Z#'||c.[ID])
                              in      classes%rowtype
                              connect by prior c.[PARENT_ID] = c.[ID]
                              start c.[ID] = p_class
                             )
            and   x.[OWNER] = 'IBS'
            and   x.[COLUMN_NAME] not in ('SN', 'SU')
            and   x.[DATA_TYPE] in ('NUMBER', 'VARCHAR2', 'DATE', 'CHAR', 'FLOAT')
         order by x.[TABLE_NAME]
   )loop
      if not tblUsed.exists(x.c_col) then
         declare
            sSql   varchar2(2000);
            sValue   varchar2(32767) default null;
         begin
            sSql   := 'select ' || x.c_data || ' from ibs.'||x.c_tbl||' where id = :1';
            execute immediate sSql into sValue using p_obj;
   
            debug_pipe('::['||substr(x.c_tbl,3)||'].['||substr(x.c_col,3) ||'] = '||sValue, 0);
         end;
         tblUsed(x.c_col)   := null;
      end if;
   end loop;
 end;


Класс желательно тоже передавать, чтоб в OBJECTS не искать.
Да и не сложный вызов
Код:
log_obj(this%id, this%class);
Матвеев Евгений
Профи


Вступление в Клуб: 31.01.2012
СообщениеСр Авг 19, 2015 12:46    Ответить с цитатой
Полезность: Нет оценки
Класс желательно тоже передавать, чтоб в OBJECTS не искать.
Да и не сложный вызов
Код:
log_obj(this%id, this%class);
[/quote]

Вариант с передачей одним параметром (без this%class) как выглядит?
(Для внутреннего саморазвития)
Показать сообщения:   
Ответить на тему    Клуб специалистов ЦФТ-Банк (IBSO) -> Уроки ЦФТ-Банк для начинающих Часовой пояс: GMT + 3
На страницу 1, 2  След.
Страница 1 из 2

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