Я новичок в Oracle, и я не знаю, как использовать цикл for в Oracle SQL (не PL/SQL).
У меня было требование увеличить число на +1 в запросе и выполнить инструкции; возможно ли использовать цикл for в SQL?
Ответ 1
Ты очень растерялся моему другу. В SQL нет LOOPS, только в PL/SQL. Вот несколько примеров, основанных на существующей таблице Oracle - скопируйте/вставьте, чтобы увидеть результаты:
-- Numeric FOR loop --
set serveroutput on -->> do not use in TOAD --
DECLARE
k NUMBER:= 0;
BEGIN
FOR i IN 1..10 LOOP
k:= k+1;
dbms_output.put_line(i||' '||k);
END LOOP;
END;
/
-- Cursor FOR loop --
set serveroutput on
DECLARE
CURSOR c1 IS SELECT * FROM scott.emp;
i NUMBER:= 0;
BEGIN
FOR e_rec IN c1 LOOP
i:= i+1;
dbms_output.put_line(i||chr(9)||e_rec.empno||chr(9)||e_rec.ename);
END LOOP;
END;
/
-- SQL example to generate 10 rows --
SELECT 1 + LEVEL-1 idx
FROM dual
CONNECT BY LEVEL <= 10
/
Ответ 2
Вы, безусловно, сможете сделать это с помощью предложения WITH или использовать аналитические функции, доступные в Oracle SQL.
С некоторыми усилиями вы сможете получить что-нибудь из них с точки зрения циклов, как в обычных процедурных языках. Оба подхода довольно эффективны по сравнению с обычным SQL.