Доступ к значению реквизита ТБП по номеру
На страницу 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) как выглядит?
(Для внутреннего саморазвития) |
|
 |
|
|
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах
|
|