Давайте предположим, что (для простоты), у меня есть две таблицы:Динамический запрос со столбцами и имен таблиц из нескольких таблиц с помощью SQL или PL/SQL
Product
product_id
CreatedDate
LastEditedBy
EditedDate
Entity
entity_id
CreatedDate
LastEditedBy
EditedDate
Обе таблицы имеют одинаковые имена столбцов, но только столбец ID имеет другое имя. Я хотел бы запустить запрос, чтобы, когда я запускаю его из SQL plus, просто даю ему параметр и он получает данные из одной из таблиц. В приведенном выше примере я мог выполнить запрос, как этот
@archiveHistory.sql product
@archiveHistory.sql entity
Вот моя попытка, но она всегда не признает один из столбцов, то есть, если я запустить его с продуктом, он говорит ENTITY_ID не существует. если я запустил его с сущностью, то он говорит, что product_id не существует.
Обратите внимание, что я использую переданный параметр как для выбора столбца, так и для выбора имени таблицы.
define identifier = '&1'
Select * from (
Select case lower('&identifier')
when product then product_id
when entity then entity_id
end ID, CreatedDate, LastEditedBy, EditedDate
From &identifier
)
Я думаю, что это будет работать, если список столбцов в операторе CASE, были все из той же таблицы.
Вопросы
Что мне нужно сделать запрос игнорирует столбец, который не имеет значения то игнорировать product_id, если аргумент объект
Я думал об использовании анонимного PL/SQL block (т.е. Begin End), но я не уверен, как я могу отобразить вывод без использования dbms_output.put_line.
OP говорит, что мы должны предположить, что у них есть две таблицы «для простоты». Я подозреваю, что в реальной жизни их гораздо больше. – APC
@ APC: Я согласен, и я начал с * «Для этого конкретного случая» * :-), но если этого отказа не было («для простоты»), это было бы полезным ответом на более общий вопрос, который люди найдут, когда у них Google такая тема. Таким образом, даже если это может быть не полезно для OP, это может быть полезно для других. –