Как динамически выбирать таблицу с помощью HSQLDB и Hibernate? - PullRequest
0 голосов
/ 21 июля 2011

У меня есть таблица со ссылками на другие таблицы. Сохранено имя таблицы и идентификатор объекта.

Как это:

         ref_table

   id  | table_name | refId
-------+------------+-------
    1  |   test     |   6
    2  |   test     |   9
    3  |   other    |   5

Теперь я пытаюсь сформулировать SQL / FUNCTION, который возвращает правильные объекты из правильных таблиц. Что-то вроде:

SELECT * FROM resolveId(3)

Я ожидал бы получить сущность с идентификатором «5» из таблицы «прочее». Это возможно? Я думаю, я могу сделать это с помощью хранимой процедуры (CREATE FUNCTION). Функция должна была бы проверить «ref_table» и вернуть имя таблицы для использования в операторе SQL ... но как именно?

1 Ответ

1 голос
/ 21 июля 2011

Если вы хотите использовать управляющие сущности в операторах выбора или соединениях, вам следует использовать CREATE FUNCTION с RETURNS TABLE (..)

В подпрограммах HSQLDB есть ограничение, запрещающее динамическое создание SQL. Поэтому тело CREATE FUNCTION может включать в себя блок CASE или IF ELSE, который переключается на предопределенный оператор SELECT на основе входного значения (1, 2, 3, ..).

Подробности CREATE FUNCTION документированы здесь: http://hsqldb.org/doc/2.0/guide/sqlroutines-chapt.html#N12CC4 Есть один пример для функции SQL с RETURNS TABLE.

...