Подтвердить что ты не робот

Для цикла в Oracle SQL

Я новичок в Oracle, и я не знаю, как использовать цикл for в Oracle SQL (не PL/SQL).

У меня было требование увеличить число на +1 в запросе и выполнить инструкции; возможно ли использовать цикл for в SQL?

4b9b3361

Ответ 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.

http://www.dba-oracle.com/t_with_clause.htm

http://www.orafaq.com/node/55

Это требует некоторых усилий. Не бойтесь опубликовать конкретный пример.

Использование простой псевдо-таблицы также помогает DUAL.