HSQLDB-如何在检查约束中使用自定义函数

时间:2019-04-18 01:19:38

标签: java sql hsqldb

首先,我创建一个简单的函数:

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 个答案:

答案 0 :(得分:1)

默认情况下,HSQLDB仅允许使用SQL标准所允许的表达式类型。这些表达式非常具体,无论您何时检查约束,都保证返回相同的结果。这不包括用户定义的功能和许多内置功能。<​​/ p>

您可以添加带有所需支票的TRIGGER。 TRIGGER是在INSERT或UPDATE时执行的,因此不能保证将来的有效性。