| 
 
  
	| Доступ к значению реквизита ТБП по номеру На страницу 1, 2  След.
 
 |  
	
		| Предыдущая тема :: Следующая тема |  
		| Автор | Сообщение |  
		| Матвеев Евгений Профи
 
 
 Вступление в Клуб: 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 не уникальный, есть дубли
  |  |  
		|  |  
		| Матвеев Евгений Профи
 
 
 Вступление в Клуб: 31.01.2012
 
 | 
			
				|  Вт Авг 18, 2015 10:08    |   |  
				| Полезность: Нет оценки 
 |  
				|  	  | vtar пишет: |  	  | Евгений, а что имеется в виду под "номером", и какую задачу решаете ? 
 есть поле position в такой табличке
 
 
  	  | Код: |  	  | select * from CLASS_ATTRIBUTES where class_id = 'PR_CRED'  order by position
 | 
 
 но у меня на схеме например, position не уникальный, есть дубли
  | 
 
 Хотелось бы что то вида
 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'), только на вход порядковый номер реквизита внутри ТБП
 | 
 
 Развлечения ради написал какую-то ерунду
   
  	  | Код: |  	  | 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 
 |  
				| Мой код падает на реквизитах без экземпляров (структура, вариант). В это случае, действительно непонятно, что писать в лог - по идее, структуру надо разворачивать по ее полям, т.к. нет экземпляра - нет значения
  ... 
 
  	  | Код: |  	  | 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 пишет: |  	  | Мой код падает на реквизитах без экземпляров (структура, вариант). В это случае, действительно непонятно, что писать в лог - по идее, структуру надо разворачивать по ее полям, т.к. нет экземпляра - нет значения
  ... 
 
  	  | Код: |  	  | 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'), только на вход порядковый номер реквизита внутри ТБП
 | 
 
 Развлечения ради написал какую-то ерунду
   
  	  | Код: |  	  | 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 не искать. Да и не сложный вызов
 
 [/quote] 	  | Код: |  	  | log_obj(this%id, this%class); | 
 
 Вариант с передачей одним параметром (без this%class) как выглядит?
 (Для внутреннего саморазвития)
 |  |  
		|  |  
		|  |  
  
	| 
 
 | Вы не можете начинать темы Вы не можете отвечать на сообщения
 Вы не можете редактировать свои сообщения
 Вы не можете удалять свои сообщения
 Вы не можете голосовать в опросах
 
 |  |