Как сохранить данные в SQL и l oop на нем? - PullRequest
1 голос
/ 08 января 2020

Как только я запускаю первый запрос, я получаю следующий результат:

REQUEST_NO R
---------- -
   4309300 A
   4300983 C

, и я хочу сравнить, если столбец R отличается от "C", выполнить второй запрос и сделать то же самое для каждого элемента, который я могу иметь в столбце REQUEST_NO значение, отличное от C

SELECT REQUEST_NO
       , REQUEST_STS 
FROM  PORT_REQUEST 
WHERE REQUEST_NO IN (SELECT DISTINCT REQUEST_NO 
                     FROM SUB_PORT_REQUEST 
                     WHERE SUBSCRIBER_NO = replace(replace('&CTN','-',''),' ',''));

Enter value for ctn: 5161890110

REQUEST_NO R
---------- -
   4309300 A
   4300983 C


SELECT ACT_SEQ_NO 
FROM SUB_PORT_REQUEST 
WHERE REQUEST_NO=&Req_No 
AND ROWNUM <=1 
ORDER BY ACT_SEQ_NO DESC;

Enter value for req_no: 4309300

ACT_SEQ_NO
----------
  91180671

Я ожидаю сохранить в массиве или что-то еще все значения и смогу перебирать его, кто-то может помочь?

Ответы [ 2 ]

1 голос
/ 08 января 2020

Один из вариантов, если вы хотите остаться в SQL* Плюс, это создать (глобальную временную?) Таблицу, сохранить в ней результат первого запроса, а затем переписать второй запрос, чтобы использовать эти результаты как

where request_no in (select request_no from my_temporary_table)

Другой вариант - переключиться на PL / SQL и написать процедуру, которая будет принимать CTN в качестве параметра. Он (PL / SQL) позволяет использовать разные способы хранения результатов первого запроса - в таблицу (как ранее) или массив.

0 голосов
/ 10 января 2020

Вы можете объединить их в один запрос, присоединившись к таблицам. Я не уверен, что знаю, как обращаться с сегментом "и rownum <= 1 Order by ...". Либо в порядке упорядочения не требуется, так как rownum <= 1 даст не более 1 строки, и независимо от того, как вы ее отсортируете, 1 строка всегда получается одинаковой. Или вы ожидаете, что несколько строк хотят только наибольшее act_seq_no. Если это так, вам нужно упорядочить в подзапросе и предикате rownum на внешнем. Предполагая, что мы получим последнее: Также предполагается, что столбец, который вы называете R в описании, на самом деле является столбцом port_request.request_sts, так как R НЕ выбран и не является псевдонимом для любого указанного столбца, на который есть ссылка. </p>

select act_seq_no
  from ( select spr.act_seq_no 
           from sub_port_request spr
           join port_request     pr
             on (spr.request_no = pr.request_no and
                 pr.request_sts != 'C'
                )
          where spr.subscriber_no = replace(replace('&CTN','-',''),' ','')
          order by spr.act_seq_no desc
       )
 where rownum<=1;
...