Если вы можете изменить структуру таблицы, я бы предложил добавить в таблицу «виртуальный столбец» с более длинными именами (например, OCEAN).
Данные вычисляются (или генерируются) из реальныхстолбец transport_mode
.Он выглядит как обычный столбец, но в базе данных ничего не сохраняется, но при необходимости вычисляется как.
Другими словами, мы перемещаем ваш код, который выполняет перевод из «O» в «OCEAN» изWHERE
в определение таблицы, чтобы оно было доступно каждому.
ALTER TABLE mwb_header ADD (long_transport GENERATED ALWAYS AS (
CASE transport_mode
WHEN 'O' THEN 'OCEAN'
WHEN 'A' THEN 'AIR'
WHEN 'R' THEN 'RAIL'
WHEN 'T' THEN 'TRUCK'
ELSE 'OTHERS'
END));
Теперь вы (и все остальные запросы) можете использовать длинные имена:
SELECT * from mwb_header WHERE long_transport='OCEAN';
точнокак короткие имена:
SELECT * from mwb_header WHERE transport_mode='O';
результаты будут точно такими же.
Еще лучше, если в таблице много строк, вы даже можете поместить индекс в вычисляемый столбец для ускорениявещи вверх:
CREATE INDEX mwb_short_transport_idx ON mwb_header(long_transport);