Как уже отмечали другие, вы, вероятно, можете решить свою проблему с помощью обычного оператора DML, без каких-либо циклов. Но чтобы дать вам некоторые основы о том, как выполнить то, что вы просили в PL / SQL, вот пример ...
DECLARE
CURSOR c IS
SELECT id, aid, type FROM b;
statement VARCHAR2(200);
BEGIN
FOR iterator IN c LOOP
IF iterator.id = iterator.aid THEN
statement := 'UPDATE a SET color = ' || iterator.type || 'WHERE id = ' || iterator.id;
EXECUTE IMMEDIATE statement;
END IF;
END LOOP;
END;
Этот анонимный PL / SQL-блок будет перебирать каждую запись в таблице b, а если b.id = b.aid, он будет обновлять таблицу a и устанавливать a.color = b.type, где a.id = b.id .
Кажется, это то, что вы просили. Это не совсем эффективный способ сделать что-то, так как вы запускаете один оператор DML на строку в таблице b с b.id = b.aid. Но я хотел больше привести это в качестве примера синтаксиса. Кстати, это всего лишь один способ перебора курсора; Вы также можете явно открывать курсоры и извлекать записи, но так проще, если вам не нужно ничего делать, кроме как перебирать весь набор результатов.