【问题标题】:HSQLDB - How to use custom function in check constraintHSQLDB - 如何在检查约束中使用自定义函数
【发布时间】:2023-03-24 06:13:01
【问题描述】:

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

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

不明白为什么,有没有办法达到想要的效果?

【问题讨论】:

  • 为什么不用外键?
  • @a_horse_with_no_name 我愿意,但我希望能够只允许某些值。我无法创建其他表来仅使用外键来解决此问题。
  • 据我所知,HSQLDB 不支持用于检查约束的用户定义函数。

标签: java sql hsqldb


【解决方案1】:

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

您可以添加带有所需检查的 TRIGGER。 TRIGGER 是在 INSERT 或 UPDATE 的时候执行的,所以不保证以后的有效性。

【讨论】:

    猜你喜欢
    • 2017-03-03
    • 1970-01-01
    • 1970-01-01
    • 2022-06-07
    • 1970-01-01
    • 2019-10-24
    • 2015-11-01
    • 2013-12-07
    • 2021-05-16
    相关资源
    最近更新 更多