Oracle DBA Forum  

Вернуться   Oracle DBA Forum > Работа > temp

Ответ
 
Опции темы Опции просмотра
  #1  
Старый 19.10.2009, 20:05
Marley Marley вне форума
Senior Member
 
Регистрация: 19.09.2009
Сообщений: 7,211
По умолчанию Циклы (Loops)

The simple loop
__________________
Телеграм чат
Ответить с цитированием
  #2  
Старый 19.10.2009, 20:07
Marley Marley вне форума
Senior Member
 
Регистрация: 19.09.2009
Сообщений: 7,211
По умолчанию The simple loop

The simple loop

Код:
/* File on web: loop_examples.sql
PROCEDURE display_multiple_years (start_year_in IN PLS_INTEGER, end_year_in IN PLS_INTEGER)

IS

   l_current_year PLS_INTEGER := start_year_in;

BEGIN

   LOOP
       EXIT WHEN l_current_year > end_year_in;
             display_total_sales (l_current_year);
             l_current_year := l_current_year + 1;
    END LOOP;

END display_multiple_years;
__________________
Телеграм чат
Ответить с цитированием
  #3  
Старый 19.10.2009, 20:10
Marley Marley вне форума
Senior Member
 
Регистрация: 19.09.2009
Сообщений: 7,211
По умолчанию The FOR loop

The FOR loop

Код:
FOR loop index IN [REVERSE] lowest number .. highest number
   LOOP
      executable statement(s)
   END LOOP;

Код:
FOR loop_counter IN 1 .. 10
LOOP
... executable statements ...
END LOOP;


Код:
FOR loop_counter IN REVERSE 1 .. 10
LOOP
... executable statements ...
END LOOP;


Код:
/* File on web: loop_examples.sql
PROCEDURE display_multiple_years (start_year_in IN PLS_INTEGER, end_year_in IN PLS_INTEGER)
IS

BEGIN

     FOR l_current_year IN start_year_in .. end_year_in
        LOOP
             display_total_sales (l_current_year);
        END LOOP;


END display_multiple_years;

Код:
/* File on web: loop_examples.sql
PROCEDURE display_multiple_years (start_year_in IN PLS_INTEGER, end_year_in IN PLS_INTEGER)
IS

BEGIN

    FOR l_current_year IN (
       SELECT * FROM sales_data
       WHERE year BETWEEN start_year_in AND end_year_in)
    LOOP

-- This procedure is now accepted a record implicitly declared
-- to be of type sales_data%ROWTYPE...
display_total_sales (l_current_year);

     END LOOP;

END display_multiple_years;



Код:
FOR record IN { cursor_name | (explicit SELECT statement) }
   LOOP
       executable statement(s)
   END LOOP;

Код:
FOR book_rec IN (SELECT * FROM books)
   LOOP
         show_usage (book_rec);
   END LOOP;
__________________
Телеграм чат

Последний раз редактировалось Marley; 19.10.2009 в 21:52.
Ответить с цитированием
  #4  
Старый 19.10.2009, 20:10
Marley Marley вне форума
Senior Member
 
Регистрация: 19.09.2009
Сообщений: 7,211
По умолчанию The WHILE loop

The WHILE loop

Код:
WHILE condition
     LOOP
         executable statement(s)
     END LOOP;

Код:
/* File on web: loop_examples.sql
PROCEDURE display_multiple_years (start_year_in IN PLS_INTEGER, end_year_in IN PLS_INTEGER)
IS
   l_current_year PLS_INTEGER := start_year_in;

BEGIN

WHILE (l_current_year <= end_year_in)
   LOOP
      display_total_sales (l_current_year);
      l_current_year := l_current_year + 1;
   END LOOP;

END display_multiple_years;



Код:
/* File on web: datemgr.pkg */
WHILE mask_index <= mask_count AND NOT date_converted
   LOOP
       BEGIN
       /* Try to convert string using mask in table row */
       retval := TO_DATE (value_in, fmts (mask_index));
       date_converted := TRUE;

        EXCEPTION
        WHEN OTHERS
        THEN
         mask_index:= mask_index+ 1;

         END;

    END LOOP;
__________________
Телеграм чат

Последний раз редактировалось Marley; 19.10.2009 в 20:24.
Ответить с цитированием
  #5  
Старый 19.10.2009, 20:18
Marley Marley вне форума
Senior Member
 
Регистрация: 19.09.2009
Сообщений: 7,211
По умолчанию EXIT and EXIT WHEN

EXIT;
EXIT WHEN condition;

Код:
LOOP
      balance_remaining := account_balance (account_id);
      
       IF balance_remaining < 1000
       THEN
             EXIT;
        ELSE
              apply_balance (account_id, balance_remaining);
        END IF;
END LOOP;




Код:
LOOP
    /* Calculate the balance */
    balance_remaining := account_balance (account_id);

    /* Embed the IF logic into the EXIT statement */
    EXIT WHEN balance_remaining < 1000;

     /* Apply balance if still executing the loop */
     apply_balance (account_id, balance_remaining);
END LOOP;
__________________
Телеграм чат
Ответить с цитированием
  #6  
Старый 19.10.2009, 20:19
Marley Marley вне форума
Senior Member
 
Регистрация: 19.09.2009
Сообщений: 7,211
По умолчанию Emulating a REPEAT UNTIL Loop

Код:
LOOP
      ... body of loop ...
      EXIT WHEN boolean_condition;
END LOOP;
__________________
Телеграм чат
Ответить с цитированием
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход


Текущее время: 22:26. Часовой пояс GMT +3.


Powered by vBulletin®