Oracle Loop запрос с идентификатором переменной, который содержится в другой таблице (итеративный) - PullRequest
0 голосов
/ 20 сентября 2019

У меня есть два запроса, один из которых выбирает идентификаторы:

SELECT CLIENT_REFERENCE FROM ISET.INVESTOR

У меня проблема в том, что мне нужно выполнить запрос ниже для каждого идентификатора.Я поместил текст «ЭТО НЕОБХОДИМО ЗАМЕНИТЬ С ИДЕНТИФИКАТОРОМ», где необходимо разместить идентификатор (CLIENT_REFERENCE).

Я не могу использовать оператор IN, потому что мне также нужно, чтобы CLIENT_REFERENCE появлялся для каждой записиполучено из запроса.

Конечным результатом должно быть то, что находится в полях оператора SELECT, а также запрашиваемый идентификатор клиента / ID.

Я использую dbeaver для запуска операторовпротив БД оракула. ​​

Запрос - я поместил текст «ЭТО НУЖНО ЗАМЕНИТЬ С ИДЕНТИФИКАТОРОМ», где необходимо разместить ИД (CLIENT_REFERENCE).

    SELECT /*+ RULE */
a.holder,
    sum(((amount)*-1)/nvl(s.minor_per_unit,1)) bal,
    e.security_id,
    s.local_code,
    s.curr_sym,
    s.name,
    nvl(s.minor_per_unit,1) mpu,
    nvl(s.decimal_places,0) dp,
    nvl(s.pricing_units,1) pricing_units,
    s.exchange_rate,
    s.val_security,
    SUM(CASE WHEN S.VAL_SECURITY NOT IN ('GBP') AND E.SECURITY_ID NOT IN ('GBP') Then ((((amount)*-1)/nvl(s.minor_per_unit,1))*s.exchange_rate)*(SELECT EXCHANGE_RATE FROM ISET.SECURITY WHERE SECURITY_ID=S.VAL_SECURITY) WHEN S.VAL_SECURITY IN ('GBP') AND E.SECURITY_ID NOT IN ('GBP') Then ((((amount)*-1)/nvl(s.minor_per_unit,1))*s.exchange_rate) Else ((amount)*-1)/nvl(s.minor_per_unit,1) End )GBP_VALUE,
    (CASE WHEN e.security_id IN ('GB00BCFKG114','GB00BJ591Z61','GB00BLRZNY93','GB00BQ70PN21','GB00BYZZYP05','GB00BD5NDM75','GB00BD5NDF09','GB00BYQLMM09','GB00BDRKWQ32','GB00BD3H4G23','GB00BYQJ1839','GB00BFX17144','GB00BV9G0J47','GB00BYQJ1946','GB00BD5M5K62','GB00BGPP6817','XS0159013068') THEN 'BONDS' ELSE s.class_narrative END) AS ASSETCLASS
FROM trans t, security s, account a, entry e
WHERE a.account_id in
    (select account_id from account
    where account_id in
        (select account_id from account
        connect by prior account_id = parent
        start with account_id in
            (select account_id from account x
            where type = 'INVESTOR'
            and holder ="THIS NEEDS TO BE REPLACED WITH THE ID"
        and (
        ('PHY_CUS') in
            (select account_id from account
            connect by prior parent = account_id
            start with account_id = x.account_id)
        OR
            ('CRE_AV') in
            (select account_id from account
            connect by prior parent = account_id
            start with account_id = x.account_id)
        or ('CRE_INV') in
            (select account_id from account
            connect by prior parent = account_id
            start with account_id = x.account_id)
        or ('CDP') in
            (select account_id from account
            connect by prior parent = account_id
            start with account_id = x.account_id)
            )
        )))
and e.account_id = ''||a.account_id
and ( ''||a.type in ( 'CRE_DEL','CRE_RES','CRE_STW','CRE_OAT','CRE_MTM',
        'CRE_USE','INVESTOR','CRE_ESCROW' )
    or ( ''||a.type = 'CRE_CLA' and nvl(s.class_narrative,'SHARES') != 'CURRENCY' ) )
and ( ''||a.type != 'CRE_DEL'
    or ( ''||a.type = 'CRE_DEL'
        and exists(
            select 1 from entry ee, account aa
            where aa.account_id = ee.account_id
            and aa.type = a.type
            and aa.holder = a.holder
            and ''||ee.security_id != e.security_id ) ) )
and s.security_id = ''||e.security_id
and t.trans_id = ''||e.trans_id
and nvl( e.val_date, decode('STAT',
        'STAT',t.statement_date, 'PHYS',t.physical_date-1 ) )
    <= '05-AUG-19'
group by 
a.holder, e.security_id,
    s.local_code,
    s.curr_sym,
    s.name,
    nvl(s.minor_per_unit,1),
    nvl(s.decimal_places,0),
    nvl(s.pricing_units,1),
    s.exchange_rate,
    s.val_security,
    S.class_narrative
having sum(amount) !=0;

СпасибоВы за чтение, любая помощь будет принята с благодарностью.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...