Доступ к значению реквизита ТБП по номеру 
	  На страницу 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 не искать.
 
Да и не сложный вызов
 
 	  | Код: | 	 		  | log_obj(this%id, this%class); | 	  [/quote]
 
 
Вариант с передачей одним параметром (без this%class) как выглядит?
 
(Для внутреннего саморазвития) | 
			 
		  | 
	 
	
		  | 
	 
	
		 | 
	 
 
  
	 
	    
	   | 
	
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах
  | 
   
 
		 |