Oracle SQL - есть ли более эффективный способ организации массивного оператора case

В настоящее время у меня есть отчет, который рассматривает различные типы документов. Каждый документ имеет назначенную шкалу времени, к которой он должен быть заполнен (т.е. 2 дня, 4 дня и т. Д.). Существует более 100 видов документов. В настоящее время эта назначенная временная шкала для каждого документа хранится в электронной таблице Excel и сопоставляется с данными в Excel с использованием формулы vlookup (на основе идентификатора оценки). К сожалению, в нашей базе данных нет места для установки этого назначенного графика времени, но я хотел бы иметь возможность запускать отчет из базы данных и просто отправлять его пользователям, не выполняя эту дополнительную манипуляцию в Excel. Я знаю, что мог бы достичь этого, написав массивное заявление о кейсе (ниже приведен только пример)

т.е.

SELECT
ID,
CASE WHEN ID = 1 then '1 day' 
WHEN ID = 2 then '42 days'
WHEN ID = 3 then '16 days'
ELSE 'CHECK' end as 'Timescale'
FROM TABLE1

Но мне было интересно, есть ли более эффективный способ сделать это в SQL (кроме запроса дополнительного поля в базе данных для записи этого!)? Возможно, что нет, но подумал, что стоит спросить! Благодарю.

2 ответа

Решение

Итак, вы хотите объединить таблицу Oracle и таблицу Excel...

Я думаю, что это не совсем невозможно. Есть 2 способа.

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

Да, действительно, это очень сложно.

Способ 2. Я думаю, что вы можете подключиться из листа Excel к Oracle через ODBC. Должна быть возможность извлекать данные из Oracle в рамках Excel. Так что Excel может сделать соединение для вас.

Да, действительно, это очень сложно.

Вы также можете поместить эти дополнительные данные в новую таблицу Timescale (как предложил Боб Джарвис), но вам придется синхронизировать между таблицей Excel и таблицей Oracle.

Вы также можете переместить все данные в Oracle. Или, может быть, вы можете переместить все данные в Excel (вероятно, нет)?

Если у вас есть 100 различных временных шкал, было бы разумно добавить таблицу TIMESCALE в вашу базу данных и отказаться от хранения информации, которая важна для вашего бизнеса, в электронной таблице. Ничего не имею против Excel, хорошего продукта, некоторые из моих лучших друзей - электронные таблицы Excel, но я не храню в них критически важную для бизнеса информацию.

Поделитесь и наслаждайтесь.

Другие вопросы по тегам