powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / ORA-22905 - Как установить приоритет выполнения части запроса
14 сообщений из 14, страница 1 из 1
ORA-22905 - Как установить приоритет выполнения части запроса
    #39410389
HOME_X
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Доброго дня господа !

Запрос, работает с массивами = select * from table(select POS from TRN_LIST)
и пользов. типом pipelined функция
Реализован with - ми

если выполнять его в два этапа
- основной запрос RCC_KREDIT явно слить в таблицу
- к этой таблице подключить пользовательский тип
все в порядке

Если реализовать в один этап - ошибка = Ora-22905 cannot access rows from a non nested table item
Насколько понимаю поль. тип не может получить данных , их на момент вызова еще нет

Дополнения и пояснение
- With реализация для параметризирован. запроса
- TABLEDAY = параметр. дат
- TRN_LIST = набор констанат
- RCC_KREDIT это основной запрос, он делает сборку данных
для послед. передачи в функцию расчета (поль. тип ttRcc)

Вот надо как то сказать
- сначала полностью собери данные и сохрани их в времен. таблице (/*+ Materialize */)
- связь с типом ttRcc и расчет сделай "ПОПИСЖЕ".

Заранее благодарен !

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
with    TABLEDAY as (select 
                            Trunc(T.DREP,'MM') DBEG,
                            Last_Day(T.DREP)   DEND
                       from (select 
                                    To_Date('01-01-2017','DD-MM-YYYY') DREP
                               from DUAL
                            ) T        
                    ),
        TRN_LIST as (select 
                            Sys.OdciVarchar2List('CT2111','CT0040','CT0041','CT0042','CT0043','CT0047','CT0052','CT2011','CT2013','CT2031','CT2033','CT2113','CT2131','CT2133') ATM,
                            Sys.OdciVarchar2List('CT0044','CT0045','CT0047','CT0048','CT0049','CT0052','CT0053','CT0054','CT0065','CT0066','CT2021','CT2121') POS,
                            Sys.OdciVarchar2List(         'CT0040','CT0041','CT0042','CT0043') USB
                       from DUAL
                    ),   
      RCC_KREDIT as (select /*+ Materialize */
                            A.CEEIB_S_UA_DEAL                                             ID_CONTRACT_SAP,
                            Max(Nvl(G.ACTIVE,B.S_UA_DFRO))                                ACTIVE, 
                            Max('RCC')                                                    PROGRAM,
                            Max(D.TXTMD)                                                  NETWORK,
                            Max(B.SCHEMA)                                                 CREDIT_TYPE,
                            'ALL'                                                         TECHNOLOGY,
                            Sum(A.DEB_CRE_LC)                                             TOTAL_PRICE,
                            Round(Sum(Case when A.TB_TRNTYPE in(select * from table(select POS from TRN_LIST)) then 0
                                           when      Trunc(Months_Between(Nvl(G.ACTIVE,B.S_UA_DFRO),C.DBEG))=0 then F.OPENING_RATE1
                                           when A.TB_TRNTYPE in(select * from table(select USB from TRN_LIST)) then F.OPENING_RATE_UKRSIB       
                                                                                                               else F.OPENING_RATE_OTHER
                                      end * A.DEB_CRE_LC
                                     )
                                     /Sum(A.DEB_CRE_LC)
                                 ,8
                                 )                                                        OPENING_RATE,
                            0                                                             MONTHLY_RATE,
                            Round(Sum(Case when A.TB_TRNTYPE in(select * from table(select ATM from TRN_LIST)) then E.B0_NDUE/100 
                                                                                                               else E.B1_NDUE/100 
                                      end * A.DEB_CRE_LC
                                     )
                                     /Sum(A.DEB_CRE_LC)
                                 ,8
                                 )                                                        ACT_RATE,
                            Max(P.VALUE)                                                  FTP_RATE,     
                            Round(Sum(Greatest(E.B0_PMIN/100,0.00000001)*A.DEB_CRE_LC)/Sum(A.DEB_CRE_LC),8) MIN_RATE,     
                            Round(Sum(         F.COMIS_RKO        *A.DEB_CRE_LC)/Sum(A.DEB_CRE_LC),8) COMIS_RKO,  
                            Greatest(Max(Ceil(Months_Between(Add_Months(Nvl(G.ACTIVE,B.S_UA_DFRO),
                                                                        Case when Add_Months(Nvl(G.ACTIVE,B.S_UA_DFRO),24)<C.DBEG then 48 else 24 end
                                                                       )
                                                             ,C.DBEG
                                                            )-1 
                                             )
                                        )                   
                                    ,1
                                    )                                                     DURATION,       
                            Round(Sum(Case when A.TB_TRNTYPE in(select * from table(select ATM from TRN_LIST)) then F.GRACE 
                                                                                                               else       0 
                                      end * A.DEB_CRE_LC
                                     )
                                     /Sum(A.DEB_CRE_LC)
                                 ,8
                                 ) GRACE
                       from ADBUS.V_CFA_PAYM A
                       left join ADBUS.V_CFA_CTX_DEAL B                                             
                         on (B.CEEIB_S_UA_DEAL=A.CEEIB_S_UA_DEAL)
                       left join ADBUS.V_CFA_CTX_DIC_CARD_PRODUCT D
                         on (D.CTX_CRPR=B.CARD_PRODUCT)
                       left join ADBUS.V_CFA_CTX_SCHEME E 
                         on (    'CRTX\'||E.CTX_PROF||'\'||E.CRTX_SCH=B.SCHEMA
                             and A.PSTNG_DATE between E.DATE_FROM and E.DATE_TO
                            )
                       left join PF_REPORT.PM_CFA_CARD_PRODUCT F
                         on (    F.CARD_PRODUCT=B.CARD_PRODUCT
                             and A.PSTNG_DATE between F.DATE_FROM and F.DATE_TO
                            )
                       left join (select ACC_NUMBER  ID_CONTRACT_SAP,
                                         Min(DATE_FROM) ACTIVE
                                    from ADBUS.V_CFA_CTX_CARD
                                   where CARD_STATUS='CHST0'
                                   group by ACC_NUMBER
                                 ) G
                         on (G.ID_CONTRACT_SAP=Ltrim(A.CEEIB_S_UA_DEAL,'CTX'))
                       left join PM_FTP P
                         on (    P.DAY =Last_Day(Nvl(G.ACTIVE,B.S_UA_DFRO))
                             and P.KIND='bullet'
                             and P.RATE=0.0
                             and P.SPAN=24
                            ),
                            TABLEDAY C
                      where A.PSTNG_DATE between C.DBEG and C.DEND
                        and A.CEEIB_S_UA_DEAL like 'CTX2625%'
                        and A.TB_TRNTYPE in(select * 
                                              from table(select ATM from TRN_LIST)
                                             union all
                                            select * 
                                              from table(select POS from TRN_LIST)               
                                           )
                        and A.ACCDEBCRED='D'
                      group by
                            A.CEEIB_S_UA_DEAL
                    )
select A.*
  from (select C.*
          from (select /*+ No_Merge */
                       b.id_contract_sap,
                       b.program,
                       b.network,
                       b.credit_type,
                       b.technology,
                       b.TOTAL_PRICE,
                       b.OPENING_RATE,
                       b.monthly_rate,
                       b.act_rate,
                       b.ftp_rate,
                       b.min_rate,
                       b.comis_rko,
                       b.DURATION,
                       b.grace,
                       null MODES
                  from RCC_KREDIT b
               ) C
       ) A,
       table(ttRcc(A.id_contract_sap, 
                   A.program,
                   A.network,
                   A.credit_type,
                   A.technology,
                   A.total_price,
                   A.opening_rate,
                   A.monthly_rate,
                   A.act_rate,
                   A.ftp_rate,
                   A.min_rate,
                   A.comis_rko,
                   A.duration,
                   A.grace,
                   A.modes 
                  ).Show()
            ) T
...
Рейтинг: 0 / 0
ORA-22905 - Как установить приоритет выполнения части запроса
    #39410402
Чехов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
упрости свою простыню с пятнами, смотреть тошно
...
Рейтинг: 0 / 0
ORA-22905 - Как установить приоритет выполнения части запроса
    #39410416
HOME_X
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чехов,
Верю ... тогда пояснить еще сложнее

Не понимает синтаксиса вложенного запроса
Ошибка =Case when B_TRNTYPE in(select * from table(select POS from TRN_LIST))
Нормально=Case when TB_TRNTYPE in('CT2111','CT0040','CT0041','CT0042','CT0043','CT0047','CT0052')

Чем можно заменить ?
With TRN_LIST - хотелось бы оставить, реляцию создавать не хотелось бы (в смысле не сносить во FROM)
...
Рейтинг: 0 / 0
ORA-22905 - Как установить приоритет выполнения части запроса
    #39410421
HOME_X
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HOME_X,

Т.е. непонимает именно ссылку на таблицу, неважно какую

............Case when A.TB_TRNTYPE in (select 'DDD' from DUAL ).......
...
Рейтинг: 0 / 0
ORA-22905 - Как установить приоритет выполнения части запроса
    #39410447
Vint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HOME_X,
типа если 1 раз обьявить то потом проще получать первый и последний день? это как ронять себе на ногу гирю и смотреть на результат
Код: plsql
1.
2.
3.
4.
5.
6.
7.
select 
                            Trunc(T.DREP,'MM') DBEG,
                            Last_Day(T.DREP)   DEND
                       from (select 
                                    To_Date('01-01-2017','DD-MM-YYYY') DREP
                               from DUAL
                            ) T 



обьявить таблицу из 1 строки чтобы запихнуть в три столбца три массива... три таблички тебя чем не устроили?
Код: plsql
1.
2.
3.
4.
5.
select 
                            Sys.OdciVarchar2List('CT2111','CT0040','CT0041','CT0042','CT0043','CT0047','CT0052','CT2011','CT2013','CT2031','CT2033','CT2113','CT2131','CT2133') ATM,
                            Sys.OdciVarchar2List('CT0044','CT0045','CT0047','CT0048','CT0049','CT0052','CT0053','CT0054','CT0065','CT0066','CT2021','CT2121') POS,
                            Sys.OdciVarchar2List(         'CT0040','CT0041','CT0042','CT0043') USB
                       from DUAL


а так писать надо чтобы никто не догадался?
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
(select C.*
          from (select /*+ No_Merge */
                       b.id_contract_sap,
                       b.program,
                       b.network,
                       b.credit_type,
                       b.technology,
                       b.TOTAL_PRICE,
                       b.OPENING_RATE,
                       b.monthly_rate,
                       b.act_rate,
                       b.ftp_rate,
                       b.min_rate,
                       b.comis_rko,
                       b.DURATION,
                       b.grace,
                       null MODES
                  from RCC_KREDIT b
               ) C
       ) A,


или тебе платят построчно? и зачем тебе таблица Т если ты все равно делаешь select A.*

идиотизм не лечиться. ты же не проограмист.. ты говнокодер. помогать и что-то обьяснять можно если человек хоть как то следит за кодом. а в дерьме копаться за бесплатно - увольте.
...
Рейтинг: 0 / 0
ORA-22905 - Как установить приоритет выполнения части запроса
    #39410451
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HOME_XТ.е. непонимает именно ссылку на таблицу, неважно какую

............Case when A.TB_TRNTYPE in (select 'DDD' from DUAL )......Врёшь. Ты просто не умеешь декомпозировать, а лишь владеешь ремеслом быдло-копи-паста.
Если бы владел упрощением, то смог бы и сам в процессе понять, где лопух, не вынося сор на форум.
...
Рейтинг: 0 / 0
ORA-22905 - Как установить приоритет выполнения части запроса
    #39410468
HOME_X
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VintHOME_X,
типа если 1 раз обьявить то потом проще получать первый и последний день? это как ронять себе на ногу гирю и смотреть на результат

Все параметрические переменные - сносятся в первые строки кода.
Так читабельнее и удобнее при изменении, не надо шарить по полному листингу кода
Этот with параметризирует временной период могут использоваться во многократно


Vintобьявить таблицу из 1 строки чтобы запихнуть в три столбца три массива... три таблички тебя чем не устроили?

Где Вы намерены хранить эти три таблички ? В базе ? Зачем ?
Они не являются глобальными данными и используются исключительно для одного отчета
Эти константы классифицированы фунционал. и компактно записаны одной строкой и тремя полями
Чем не нравиться такая запись ? Oracle такое понимает .... (всегда ли это вопрос ?)
Это with параметризирует локальные константы, дает возможность их менять в одном месте

Два with можно совместить.... , об этом после

Vintа так писать надо чтобы никто не догадался?


Это уже практиковал (комбинировал) код после возникновения ошибки в ПРОДУКТИВЕ выглядит так
Где псевдоним А(В) - это запрос по сборке исходных данных
T - тип который отвечает за расчет

/*
select T.*
from (select /*+ No_Merge * /
b.id_contract_sap,
b.program,
b.network,
..............
b.DURATION,
b.grace,
Cast(null as Varchar2(10)) MODES
from RCC_KREDIT b
) A,
table(ttRcc(A.id_contract_sap,
A.program,
..................
) T
*/

Так понятно ?
...
Рейтинг: 0 / 0
ORA-22905 - Как установить приоритет выполнения части запроса
    #39410476
HOME_X
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ElicHOME_XТ.е. непонимает именно ссылку на таблицу, неважно какую

............Case when A.TB_TRNTYPE in (select 'DDD' from DUAL )......Врёшь. Ты просто не умеешь декомпозировать, а лишь владеешь ремеслом быдло-копи-паста.
Если бы владел упрощением, то смог бы и сам в процессе понять, где лопух, не вынося сор на форум.


Первоначальный вопрос звучал так

- основной запрос RCC_KREDIT работает нормально, со всеми with и массивами
(если запустить его отдельно)
- подвязываем поль. тип ttRcc - получаем ошибку

- если слить основной запрос RCC_KREDIT ЯВНО в таблицу
- подвязываем поль. тип - НЕ получаем ошибку !!!

Отсюда первая попытка решить проблемы

Сначала заставить базу выполнить сборку данных RCC - материализовать результат
далее вторым этапом связать
Как это сделать - пожалуйста четко и конкретно ?


Второе решение попытаться переписать ПОПОНЯТНЕЕ основной код = RCC_KREDIT

Как искать в массиве, умею так

select ..............
Case when A.TB_TRNTYPE in (select * from table(H.ATM)) then ................
from ....... A,
TRN_LIST H -- здесь всегда одна запись

Есть еще варианты - уточните на примере..

Делать множественную реляцию не интересно


Заранее благодарен !
...
Рейтинг: 0 / 0
ORA-22905 - Как установить приоритет выполнения части запроса
    #39410487
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HOME_XОтсюда первая попытка решить проблемыМетод тыка.
HOME_XКак это сделать - пожалуйста четко и конкретно ?
уточните на примереНаивность вкупе с наглостью?
Но совет дам. Твоя портянка только годится только для (не)печати на мягкой бумаге.
HOME_XДелать множественную реляцию не интересноГадать на гуще версий - тоже.
...
Рейтинг: 0 / 0
ORA-22905 - Как установить приоритет выполнения части запроса
    #39410505
HOME_X
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ElicHOME_XОтсюда первая попытка решить проблемыМетод тыка.
HOME_XКак это сделать - пожалуйста четко и конкретно ?
уточните на примереНаивность вкупе с наглостью?
Но совет дам. Твоя портянка только годится только для (не)печати на мягкой бумаге.
HOME_XДелать множественную реляцию не интересноГадать на гуще версий - тоже.


Если Вы знаете Все настолько хорошо что Вам не любопытно
Зачем тратить СВОЕ и ЧУЖОЕ время, натирать мозоли и гадить сервер столь содержательными постами.....?


P.S. Всего доброго ...
...
Рейтинг: 0 / 0
ORA-22905 - Как установить приоритет выполнения части запроса
    #39410506
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HOME_Xгадить сервер столь содержательными постами.....?Ты слишком высокого мнения о своём содержании.
HOME_XP.S. Всего доброго ...Кто хочет видеть личного, тот видит только его.
...
Рейтинг: 0 / 0
ORA-22905 - Как установить приоритет выполнения части запроса
    #39410533
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HOME_XЧехов,
Верю ... тогда пояснить еще сложнее

Не понимает синтаксиса вложенного запроса
Ошибка =Case when B_TRNTYPE in(select * from table(select POS from TRN_LIST))
Нормально=Case when TB_TRNTYPE in('CT2111','CT0040','CT0041','CT0042','CT0043','CT0047','CT0052')

Чем можно заменить ?
With TRN_LIST - хотелось бы оставить, реляцию создавать не хотелось бы (в смысле не сносить во FROM)Что именно не понимает то?
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
SQL> with
  2          TRN_LIST as (select
  3                              Sys.ku$_vcnt('CT2111','CT0040','CT0041','CT0042','CT0043','CT0047','CT0052','CT2011','CT2013','CT2031','CT2033','CT2113','CT2131','CT2133
') ATM,
  4                              Sys.ku$_vcnt('CT0044','CT0045','CT0047','CT0048','CT0049','CT0052','CT0053','CT0054','CT0065','CT0066','CT2021','CT2121') POS,
  5                              Sys.ku$_vcnt(         'CT0040','CT0041','CT0042','CT0043') USB
  6                         from DUAL
  7                      )
  8  , test_data as
  9  (
 10  select 'CT2111' value from dual
 11  union all select 'CT9999' value from dual
 12  )
 13  select test_data.*
 14  from test_data
 15  where value in (select * from table(select atm from TRN_LIST));

VALUE
------
CT2111


Как альтернатива, можно еще
1) либо unnest коллекции
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
SQL> with
  2          TRN_LIST as (select
  3                              Sys.ku$_vcnt('CT2111','CT0040','CT0041','CT0042','CT0043','CT0047','CT0052','CT2011','CT2013','CT2031','CT2033','CT2113','CT2131','CT2133
') ATM,
  4                              Sys.ku$_vcnt('CT0044','CT0045','CT0047','CT0048','CT0049','CT0052','CT0053','CT0054','CT0065','CT0066','CT2021','CT2121') POS,
  5                              Sys.ku$_vcnt(         'CT0040','CT0041','CT0042','CT0043') USB
  6                         from DUAL
  7                      )
  8  , test_data as
  9  (
 10  select 'CT2111' value from dual
 11  union all select 'CT9999' value from dual
 12  )
 13  select test_data.*
 14  from test_data
 15  where value in (select value(t) atm from TRN_LIST, table(atm) t);

VALUE
------
CT2111


2) либо воспользоваться условием member of
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
SQL> with
  2          TRN_LIST as (select
  3                              Sys.ku$_vcnt('CT2111','CT0040','CT0041','CT0042','CT0043','CT0047','CT0052','CT2011','CT2013','CT2031','CT2033','CT2113','CT2131','CT2133
') ATM,
  4                              Sys.ku$_vcnt('CT0044','CT0045','CT0047','CT0048','CT0049','CT0052','CT0053','CT0054','CT0065','CT0066','CT2021','CT2121') POS,
  5                              Sys.ku$_vcnt(         'CT0040','CT0041','CT0042','CT0043') USB
  6                         from DUAL
  7                      )
  8  , test_data as
  9  (
 10  select 'CT2111' value from dual
 11  union all select 'CT9999' value from dual
 12  )
 13  select test_data.*
 14  from test_data
 15  cross join trn_list
 16  where value member of trn_list.atm;

VALUE
------
CT2111



Это была теоретическая часть. Фактически, я бы не рекомендовал применять этот инструментарий, не понимая как он работает и для чего предназначен.
Ты можешь столкнуться с массой проблем начиная от ненужного использования CPU, неверной оценки кардинальности и кривых планов и заканчивая тем, что невозможно будет использовать параллельное выполнение запроса из-за примененных не к месту коллекций.

PS. Не знаю чего все так накинулись, но в следующий раз потрать еще немного времени чтоб выпилить лишнее.
Видно что ты пытался что-то сделать, но подобные полотна вызывают раздражение.
И по прежнему до конца не ясно, что у тебя не взлетело.
...
Рейтинг: 0 / 0
ORA-22905 - Как установить приоритет выполнения части запроса
    #39410660
Vint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HOME_X,
сколько работает? если нет пробуй проставить кардиналити у коллекций.
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
WITH TABLEDAY AS
 (SELECT Trunc((date '2017-01-01'), 'MM') DBEG, Last_Day(date '2017-01-01') DEND FROM DUAL),
atm AS
 (SELECT column_value tmp
    FROM TABLE(Sys.OdciVarchar2List('CT2111'
                                   ,'CT0040'
                                   ,'CT0041'
                                   ,'CT0042'
                                   ,'CT0043'
                                   ,'CT0047'
                                   ,'CT0052'
                                   ,'CT2011'
                                   ,'CT2013'
                                   ,'CT2031'
                                   ,'CT2033'
                                   ,'CT2113'
                                   ,'CT2131'
                                   ,'CT2133'))),
atm AS
 (SELECT column_value tmp FROM TABLE(Sys.OdciVarchar2List('CT0040', 'CT0041', 'CT0042', 'CT0043'))),
pos AS
 (SELECT column_value tmp
    FROM TABLE(Sys.OdciVarchar2List('CT0044'
                                   ,'CT0045'
                                   ,'CT0047'
                                   ,'CT0048'
                                   ,'CT0049'
                                   ,'CT0052'
                                   ,'CT0053'
                                   ,'CT0054'
                                   ,'CT0065'
                                   ,'CT0066'
                                   ,'CT2021'
                                   ,'CT2121')))
,
RCC_KREDIT AS
 (SELECT /*+ Materialize */
   A.CEEIB_S_UA_DEAL ID_CONTRACT_SAP
  ,MAX(Nvl(G.ACTIVE, B.S_UA_DFRO)) ACTIVE
  ,MAX('RCC') PROGRAM
  ,MAX(D.TXTMD) NETWORK
  ,MAX(B.SCHEMA) CREDIT_TYPE
  ,'ALL' TECHNOLOGY
  ,SUM(A.DEB_CRE_LC) TOTAL_PRICE
  ,Round(SUM(CASE
               WHEN A.TB_TRNTYPE IN (SELECT tmp FROM pos) THEN
                0
               WHEN Trunc(Months_Between(Nvl(G.ACTIVE, B.S_UA_DFRO), C.DBEG)) = 0 THEN
                F.OPENING_RATE1
               WHEN A.TB_TRNTYPE IN (SELECT tmp FROM USB) THEN
                F.OPENING_RATE_UKRSIB
               ELSE
                F.OPENING_RATE_OTHER
             END * A.DEB_CRE_LC) / SUM(A.DEB_CRE_LC)
        ,8) OPENING_RATE
  ,0 MONTHLY_RATE
  ,Round(SUM(CASE
               WHEN A.TB_TRNTYPE IN (SELECT tmp FROM ATM) THEN
                E.B0_NDUE / 100
               ELSE
                E.B1_NDUE / 100
             END * A.DEB_CRE_LC) / SUM(A.DEB_CRE_LC)
        ,8) ACT_RATE
  ,MAX(P.VALUE) FTP_RATE
  ,Round(SUM(Greatest(E.B0_PMIN / 100, 0.00000001) * A.DEB_CRE_LC) / SUM(A.DEB_CRE_LC), 8) MIN_RATE
  ,Round(SUM(F.COMIS_RKO * A.DEB_CRE_LC) / SUM(A.DEB_CRE_LC), 8) COMIS_RKO
  ,Greatest(MAX(Ceil(Months_Between(Add_Months(Nvl(G.ACTIVE, B.S_UA_DFRO)
                                              ,CASE
                                                 WHEN Add_Months(Nvl(G.ACTIVE, B.S_UA_DFRO), 24) < C.DBEG THEN
                                                  48
                                                 ELSE
                                                  24
                                               END)
                                   ,C.DBEG) - 1))
           ,1) DURATION
  ,Round(SUM(CASE
               WHEN A.TB_TRNTYPE IN (SELECT tmp FROM ATM) THEN
                F.GRACE
               ELSE
                0
             END * A.DEB_CRE_LC) / SUM(A.DEB_CRE_LC)
        ,8) GRACE
    FROM ADBUS.V_CFA_PAYM A
    LEFT JOIN ADBUS.V_CFA_CTX_DEAL B
      ON (B.CEEIB_S_UA_DEAL = A.CEEIB_S_UA_DEAL)
    LEFT JOIN ADBUS.V_CFA_CTX_DIC_CARD_PRODUCT D
      ON (D.CTX_CRPR = B.CARD_PRODUCT)
    LEFT JOIN ADBUS.V_CFA_CTX_SCHEME E
      ON ('CRTX\' || E.CTX_PROF || '\' || E.CRTX_SCH = B.SCHEMA AND A.PSTNG_DATE BETWEEN E.DATE_FROM AND E.DATE_TO)
    LEFT JOIN PF_REPORT.PM_CFA_CARD_PRODUCT F
      ON (F.CARD_PRODUCT = B.CARD_PRODUCT AND A.PSTNG_DATE BETWEEN F.DATE_FROM AND F.DATE_TO)
    LEFT JOIN (SELECT ACC_NUMBER ID_CONTRACT_SAP, MIN(DATE_FROM) ACTIVE FROM ADBUS.V_CFA_CTX_CARD WHERE CARD_STATUS = 'CHST0' GROUP BY ACC_NUMBER) G
      ON (G.ID_CONTRACT_SAP = Ltrim(A.CEEIB_S_UA_DEAL, 'CTX'))
    LEFT JOIN PM_FTP P
      ON (P.DAY = Last_Day(Nvl(G.ACTIVE, B.S_UA_DFRO)) AND P.KIND = 'bullet' AND P.RATE = 0.0 AND P.SPAN = 24), TABLEDAY C
   WHERE A.PSTNG_DATE BETWEEN C.DBEG AND C.DEND
     AND A.CEEIB_S_UA_DEAL LIKE 'CTX2625%'
     AND A.TB_TRNTYPE IN (SELECT tmp
                            FROM ATM
                          UNION ALL
                          SELECT tmp FROM POS)
     AND A.ACCDEBCRED = 'D'
   GROUP BY A.CEEIB_S_UA_DEAL)
SELECT b.id_contract_sap
      ,b.program
      ,b.network
      ,b.credit_type
      ,b.technology
      ,b.TOTAL_PRICE
      ,b.OPENING_RATE
      ,b.monthly_rate
      ,b.act_rate
      ,b.ftp_rate
      ,b.min_rate
      ,b.comis_rko
      ,b.DURATION
      ,b.grace
      ,NULL MODES
      ,t.*
  FROM RCC_KREDIT b
      ,TABLE(ttRcc(b.id_contract_sap, b.program, b.network, b.credit_type, b.technology, b.total_price, b.opening_rate, b.monthly_rate, b.act_rate, b.ftp_rate, b.min_rate, b.comis_rko, b.duration, b.grace, b.modes)
             .Show()) T

...
Рейтинг: 0 / 0
ORA-22905 - Как установить приоритет выполнения части запроса
    #39423491
HOME_X
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Извините господа - малость отсутствовал

Решение следующее

1. Простое и НЕВЕРНОЕ (как вариант возможен) - представить список в виде строки и осуществлять поиск через InStr
2. Правильное , искать в коллекции через member of - Case when A.TB_TRNTYPE member of C.ATM then ...........

3.Рекомендации Oracle о явном приведении типа не к чему не привело

22905, 00000, "cannot access rows from a non-nested table item"
// *Cause: attempt to access rows of an item whose type is not known at
// parse time or that is not of a nested table type
// *Action: use CAST to cast the item to a nested table type

Case when A.TB_TRNTYPE in (select * from table(cast(C.POS as Mdsys.SdorIdTab))) then F.GRACE else 0 end

4.Попытки упростить конструкцию запроса, оставить только структуру - ошибка ушла, но хотелось бы понять
ее причину (возможно в данных - поиграюсь при случае)

Но вариант два вполне приемлем - может кому пригодится

Спасибо за уделенное время и участие
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / ORA-22905 - Как установить приоритет выполнения части запроса
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]