Если для всех таблиц обновленные строки идентичны, вы можете очень легко создать сценарий обновления, используя этот SQL.
select
'UPDATE "'||TABLE_NAME||q'[" SET COL1 = 'something' WHERE col2 = 'something else';]' update_sql
from user_tables where table_name LIKE 'Table%_101818';
UPDATE "Table1_101818" SET COL1 = 'something' WHERE col2 = 'something else';
UPDATE "Table2_101818" SET COL1 = 'something' WHERE col2 = 'something else';
Просто скопируйте полученные строки в используемый вами инструмент SQL и запустите его.
* Обратите внимание, что в случае, если ваши имена таблиц находятся в смешанном регистре , вы должны заключить в кавычки в сгенерированном запросе.
Если вы хотите проверить значение предыдущих значений (перед обновлением), просто добавьте предикат в условии WHERE
.
select
'UPDATE "'||TABLE_NAME||q'[" SET COL1 = 'something' WHERE col2 = 'something else' and COL1 = 'previous value';]' update_sql
from user_tables where table_name LIKE 'Table%_101818';
UPDATE "Table1_101818" SET COL1 = 'something' WHERE col2 = 'something else' and COL1 = 'previous value';
UPDATE "Table2_101818" SET COL1 = 'something' WHERE col2 = 'something else' and COL1 = 'previous value';
В случае, если есть другое значение previos в COL1
, вы увидите 0 records updated
и никакое изменение не будет выполнено.
Наиболее общий случай, когда обновляемые значения различаются для каждой таблицы.
Вы можете настроить вспомогательную таблицу, связывающуюся с именем таблицы и значениями, и используйтеэто в запросе, создающем операторы обновления:
TABLE_NAME COL1 COL1_OLD COL2
------------------------------ ------------------------------ ------------------------------ ------------------------------
Table1_101818 something previous value something else
Table2_101818 z y x
Запрос присоединяется к вспомогательной таблице и получает правильные значения для каждой таблицы
select
'UPDATE "'||a.TABLE_NAME||'" SET COL1 = '''||b.col1||''' WHERE COL2 = '''||
b.col2||''' and COL1 = '''||b.col1_old||''';' update_sql
from user_tables a
join update_values b on a.table_name = b.table_name
where a.table_name LIKE 'Table%_101818';
UPDATE "Table1_101818" SET COL1 = 'something' WHERE COL2 = 'something else' and COL1 = 'previous value';
UPDATE "Table2_101818" SET COL1 = 'z' WHERE COL2 = 'x' and COL1 = 'y';
Обратите внимание, что этот подход хорошо работает для ограниченногоколичество таблиц, обрабатываемых за один шаг.Если у вас есть тонны таблиц или задание является периодическим, вам может понадобиться подход динамический SQL , описанный в другом ответе.