Таблица базы данных Oracle для использования в качестве массива для выполнения другого запроса - PullRequest
0 голосов
/ 09 декабря 2010

Я искал книги и сеть в течение нескольких часов, и мне не удалось найти настоящую удачу.Поскольку Oracle или PL / SQL на самом деле не самый большой мой подарок в жизни, я пробую это таким образом.

Я хочу достичь, как выбрать все записи в ТАБЛИЦЕ A и использовать «каждую» записьвнутри цикла.

В псевдокоде это будет примерно так:

x = SELECT * from TABLE_A;для каждого x ОБНОВЛЕНИЕ TABLE_B, где котенок = x;конец цикла

Помощь?

Ответы [ 2 ]

4 голосов
/ 09 декабря 2010

Если возможно, попробуйте записать его как один оператор UPDATE.

update table_b b
   set (b.col1, b.col2) = (
          select a.colx + 10, a.coly / 18
            from table_a a
           where b.id = a.id);

Это быстрее, чем процедурный аналог, а также содержит меньше строк кода, что облегчает понимание и миграцию в другую базу данных.

2 голосов
/ 09 декабря 2010

Использовать курсор:

DECLARE
cursor c1 is
   select monthly_income
   from employees
   where name = v_name_in;
BEGIN
    FOR employee_rec in c1
    LOOP
         update tableB set incom_val = employee_rec.monthly_income where ...;
    END LOOP;
END;

или:

 DECLARE
    BEGIN
        FOR employee_rec in (select monthly_income
                                from employees
                                where name = v_name_in)
        LOOP
             update tableB set incom_val = employee_rec.monthly_income where ...;
        END LOOP;
    END;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...