HSQLDB - Как использовать пользовательскую функцию в проверочном ограничении - PullRequest
0 голосов
/ 18 апреля 2019

Сначала я создаю простую функцию:

CREATE FUNCTION MY_FUNCTION(IN MY_ID BIGINT) RETURNS BOOLEAN
    SPECIFIC MY_FUNCTION_WITH_BIGINT LANGUAGE SQL NOT DETERMINISTIC READS SQL DATA RETURNS NULL ON NULL INPUT
RETURN MY_ID IN (SELECT ID
              FROM TABLE1
              WHERE NAME IN ('name1', 'name2'));

Затем я пытаюсь использовать ее в ограничении CHECK:

ALTER TABLE TABLE2 ADD CONSTRAINT CONSTRAINT1 CHECK (MY_FUNCTION(C1) = TRUE)

Я получаю это:

java.lang.RuntimeException: org.hsqldb.HsqlException: invalid expression in CHECK or GENERATED clause

Не понимаю почему, есть ли способ добиться желаемого эффекта?

1 Ответ

1 голос
/ 18 апреля 2019

По умолчанию HSQLDB допускает только типы выражений, разрешенные стандартом SQL.Эти выражения очень специфичны и гарантированно возвращают один и тот же результат независимо от того, когда вы проверяете ограничение.Это исключает пользовательские функции и многие встроенные.

Вы можете добавить TRIGGER с желаемой проверкой.TRIGGER выполняется во время INSERT или UPDATE, поэтому он не гарантирует действительность в будущем.

...