Как получить значения переменных и использовать их по запросу Oracle? - PullRequest
0 голосов
/ 20 февраля 2019

Я разрабатываю запрос, который должен использовать значения, которые были возвращены в этом объявлении:

DECLARE
    V_CD_AM NUMBER;

    cursor cd_am_cursor IS
       SELECT CD_AMOST
       FROM   L_CHEG
       WHERE  SQ_CHEG = 4153839;
BEGIN
    OPEN cd_am_cursor;
    LOOP
        FETCH cd_am_cursor into V_CD_AM;
        EXIT WHEN cd_am_cursor%NOTFOUND;                 
    END LOOP;
END;

Этот запрос возвращает две строки.Я хочу получить эти две строки и запустить его по другому запросу.Второй запрос более сложный (есть несколько объединений).На самом деле все, что мне нужно, это результат этого второго запроса.

SELECT AMAN.CD_AMOST_ANA CodAmAnalise,
             AN.DESCR_ANA         DescrAna,
             r.result              Result,
             ch.data_sist          DataCheg,
             AMAN.ORDEM               Ordem,
             aman.limite_atraso       LimiteAtraso,
             aman.idc_const       IdcConst,
             r.cod_obser         CodObser,
             r.tag_equip        Equip,
             SYSDATE                  DataAtual,
             r.seq_result          SeqResult,
             aman.cod_ana         CodAna,
             aman.idc_calc       IdcCalc,
             aman.cd_amost         CdAmost,
             aman.tempo_bloq      TempoBloq,
             r.data_sistema           DataSistema,
             r.idc_status             IdcStatus
        FROM AMOST_ANA AMAN
        JOIN ANALISE AN ON AMAN.CD_ANA = AN.CD_ANA
        LEFT JOIN CHEG_AMAN CHAMAN ON aman.cd_amost_ana =
                                                   chaman.cd_amost_ana
                                               AND aman.cd_amost =
                                                   chaman.cd_amost
                                               AND CHAMAN.seq_cheg =
                                                   4153839
        JOIN CHEG ch ON chaman.sq_cheg = ch.sq_cheg
                                 AND aman.cd_amost = ch.cd_amost
                                 AND ch.data_sistema =
                                     (SELECT MAX(data_sistema)
                                        FROM cheg
                                       WHERE sq_cheg = 4153839)
        JOIN RESULTADO R ON ch.SQ_CHEG = R.SQ_CHEG
                                  AND CHAMAN.CD_AMOST_ANA =
                                      R.COD_AMOST_ANA
                                  AND r.idc_status NOT IN ('T')
                                  AND (r.data_sistema =
                                      (SELECT MAX(data_sistema)
                                          FROM resultado
                                         WHERE sq_cheg = 4153839
                                           AND cd_amost_ana =
                                               CHAMAN.COD_AMOST_ANA
                                           AND idc_status NOT IN ('T')) OR
                                      r.data_sistema IS NULL)
       WHERE AN.IDC_ATIVO = 'True'
         AND aman.cd_amost = //Here in this line I would like use V_CD_AM
         AND AMAN.IDC_ATIVO = 'True'
       ORDER BY AMAN.ORDEM;

Есть еще один способ выполнить этот второй запрос?Запрос работает, если я введу:

AND aman.cd_amost = someRealValue

Но это someRealValue должно быть динамическим, поэтому я создаю объявление V_CD_AM, Как получить эти значения и правильно выполнить этот запрос

1 Ответ

0 голосов
/ 20 февраля 2019

Брэд говорит, что вы можете сделать:

AND aman.cd_amost in (SELECT CD_AMOST FROM L_CHEG WHERE SQ_CHEG = 4153839)

или вы можете сделать это таким образом и удалить строку в предложении WHERE.

JOIN L_CHEG ON l_cheg.SQ_CHEG = 4153839
  AND aman.cd_amost = l_cheg.cd_amost
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...