#sql #oracle
#sql #Oracle
Вопрос:
Я знаю, что это действительно запутанный фрагмент SQL, но, по сути, одна из обезьян ввода данных, где я работаю, сильно облажалась, и копия глубоко проникла в нашу систему.
Существует довольно большое количество таблиц, в которых необходимо изменить значение с VAL1 на VAL2, если другое значение равно VAL3. Проблема в том, что я не знаю всех таблиц, в которых это имеет место, и существует строгая политика именования столбцов, которая означает, что все таблицы имеют уникальные имена столбцов.
Я написал следующий SQL, чтобы попытаться выполнить это обновление, но это не работает:
UPDATE
(SELECT DISTINCT TABLE_NAME AS tbTableName
FROM ALL_TAB_COLUMNS
WHERE COLUMN_NAME LIKE '%MAJR%')
SET
(SELECT COLUMN_NAME AS tbColumnName
FROM tbTableName
WHERE COLUMN_NAME LIKE '%MAJR%') = 'VAL2'
WHERE
(SELECT COLUMN_NAME AS tbColumnNameWhere
FROM tbTableName
WHERE COLUMN_NAME LIKE '%PROGRAM%') = 'VAL3'
AND tbColumnName = 'VAL1';
Но да, это заканчивается ошибкой: недопустимый пользователь.таблица.столбец, таблица.столбец или спецификация столбца
01747. 00000 — «недопустимый пользователь.таблица.столбец, таблица.столбец или спецификация столбца»
Будем признательны за любую помощь.
Комментарии:
1. Вам потребуется использовать динамический sql
Ответ №1:
К сожалению, вы не можете выполнять подобные подзапросы. Лучше всего использовать PHP или любой другой ваш основной язык сценариев и запросить базу данных для создания всех инструкций SQL для вас.
Комментарии:
1. Огромное спасибо за это 🙂 — Я использую SQR, так что это не должно быть слишком плохо