2010-03-17 2 views
2

Мне нужно запустить запрос в цикле в SQLPLUS. и цикл цикла исходит из некоторого другого SQL-запроса. Поэтому я должен объявить переменную, которая примет значение count. Теперь я хочу использовать эту переменную в моем запросе. Как я смогу сделать то же самое. Пожалуйста, предложите мне Заранее спасибоЗапуск запроса в SQL Plus

ответ

0
BEGIN 
    DECLARE 
     count_loop   NUMBER DEFAULT 0; -- counter coming from some other SQL query... 
     progressive_number NUMBER DEFAULT 0; 
     copy_count_loop  NUMBER DEFAULT 0; 
    BEGIN 
     -- calculus generating the COUNT_LOOP value > 0. 
     copy_count_loop := count_loop; 

     FOR progressive_number IN 1 .. count_loop 
     LOOP 
     -- do your operations using copy_count_loop 
     END LOOP; 
    END; 
END; 
/

Это не так ясно, что вы хотели бы сделать с COUNT_LOOP. Я сделал копию счетчика перед входом в цикл FOR, поэтому вы можете использовать COPY_COUNT_LOOP внутри цикла FOR, не затрагивая ни переменную progressive_number, ни переменную count_loop.

2

Если я правильно понял вопрос правильно, вы можете использовать SQL * Plus переменный в сочетании с выбранной колонкой для выполнения этого:

SQL> undefine loop_ctr 
SQL> column loop_ctr new_value loop_ctr noprint 
SQL> select 5 AS loop_ctr from dual; 


SQL> set serveroutput on 
SQL> begin 
    2 for i in 1..&&loop_ctr 
    3 loop 
    4 dbms_output.put_line('i = ' || i); 
    5 end loop; 
    6 end; 
    7/
old 2: for i in 1..&&loop_ctr 
new 2: for i in 1..   5 
i = 1 
i = 2 
i = 3 
i = 4 
i = 5 
SQL> 

Надежды, что помогает