PL / SQL: цикл For для выбора по списку - PullRequest
0 голосов
/ 02 ноября 2018

Я пытаюсь сделать следующее, используя PL / SQL:

  1. Используйте запрос, чтобы получить список строк
  2. Используйте цикл for для запроса, используя список в качестве входных данных.

Пока у меня есть это:

DECLARE 
sub2 varchar2(12);

cursor sub is Select ID_SUBLIN from TABLE 1 group by ID_SUBLIN;

BEGIN
for sub2 in sub LOOP
for inner in (select * from TABLE2 where PARAMETER=sub2.ID_SUBLIN )
loop
DBMS_OUTPUT.PUT_LINE( sub2 );
end loop;
end loop;
END;
/

Однако это не работает. Я перебираю только список из 11 предметов

Заранее спасибо

Ответы [ 2 ]

0 голосов
/ 02 ноября 2018

Альтернативный способ с двумя запросами, объединенными в курсоре и затем цикличными.

DECLARE
    sub2   VARCHAR2(12);
cursor sub is 
SELECT id_sublin
FROM TABLE1
JOIN table2 
ON table2.parameter = TABLE1.id_sublin 
group    by    id_sublin;

BEGIN
    FOR sub2 IN sub 
    LOOP
        dbms_output.put_line(sub2.id_sublin);
        EXIT WHEN sub%notfound;
    END LOOP;
END;
0 голосов
/ 02 ноября 2018

У вас есть некоторые структурные проблемы и опечатки. Вместо этого попробуйте следующее:

DECLARE 
-- sub2 varchar2(12);  
--> record_index "sub2" should exist in "for sub2 in sub", not as variable.
  cursor sub is Select ID_SUBLIN from TABLE1 group by ID_SUBLIN;
                                    --TABLE^1 [table name can't contain a space]   
BEGIN
for sub2 in sub 
loop
  for inner in (select * from TABLE2 where PARAMETER=sub2.ID_SUBLIN )
  loop
   dbms_output.put_line( sub2.ID_SUBLIN ); -- must be as <record_index>.<aColumn>
   dbms_output.put_line( inner.parameter );
-- by the way, both of the record_indexes with columns of cursors may be used here.
  end loop;
end loop;
END;
/
...