Я разрабатываю веб-приложение, которое извлекает записи из базы данных в соответствии с критериями поиска пользователя. После получения результатов в потоке существует еще один этап, на котором результаты «украшаются» дополнительными данными.
Например, у нас может быть таблица базы данных Persons с такими столбцами, как: имя, возраст, рост, вес. Программа может фильтровать эту таблицу по определенной формуле логического вычисления, например. вести все записи о лицах, в которых вес человека меньше ее «идеального веса», определяемого как:
IDEAL_WEIGHT = (height/100) * age
Итак, мы покажем все записи, где IDEAL_WEIGHT ‹ вес, это можно сделать с помощью SQL, хранимых процедур и т. д. Суть в том, что мы фильтруем с помощью SQL. Что касается этапа «оформление результатов», это может быть, например, расчет WEIGHT_PER_INCH для каждого результата, определяемого как
WEIGHT_PER_INCH = height / weight
Эти «декоративные» вычисления могут быть намного сложнее, чем приведенные выше, и на самом деле шире, чем математические формулы — они могут включать данные, находящиеся на удаленных хостах, или полагаться на другие вычислительные устройства. Таким образом, кажется, что SQL и, возможно, PL/SQL не подходят для этой работы, скорее подходит Java, суть в том, что мы "украшаем" Java.
Выше мы упомянули фильтрацию по IDEAL_WEIGHT и декорирование по WEIGHT_PER_INCH, но что произойдет, если мы захотим сделать наоборот? (например, отфильтровать по WEIGHT_PER_INCH и декорировать по IDEAL_WEIGHT).
Вы можете сказать, что все эти вычислительные блоки должны быть одного типа — либо хранимые SQL-процедуры, либо Java-классы. Но если это процедуры SQL, они недостаточно выразительны, а если это классы Java, их нельзя использовать для быстрого поиска в базе данных.
Мой вопрос:
Существует ли чистый, широко используемый и быстрый способ вызова Java из SQL, например
Select * from Persons p where IDEAL_WEIGHT(p) < p.weight
где IDEAL_WEIGHT() — это метод Java, а не процедура SQL.
или: Есть ли какой-нибудь другой способ обойти все это?
Большое спасибо за ваши мысли.