Sql 我可以从列检查约束调用用户定义的函数吗?

Sql 我可以从列检查约束调用用户定义的函数吗?,sql,sqlanywhere,Sql,Sqlanywhere,我有一个用户定义的SQL函数,返回1或0,我想从列检查约束调用它。是。SQLAnywhere没有布尔数据类型,因此您必须编写一个谓词,以生成TRUE、FALSE或UNKNOWN。换句话说,如果函数返回1或0表示通过或失败,则必须将约束编码为CHECK f=1 请注意,TRUE和UNKNOWN都会导致通过;只有错误的结果才会导致检查失败 下面的示例演示如何更改已包含数据的表,以添加具有此类检查约束的列 布雷克 你只用了1分钟就找到了你自己问题的这么长的答案???@Stefan:我已经准备好了答案,

我有一个用户定义的SQL函数,返回1或0,我想从列检查约束调用它。

是。SQLAnywhere没有布尔数据类型,因此您必须编写一个谓词,以生成TRUE、FALSE或UNKNOWN。换句话说,如果函数返回1或0表示通过或失败,则必须将约束编码为CHECK f=1

请注意,TRUE和UNKNOWN都会导致通过;只有错误的结果才会导致检查失败

下面的示例演示如何更改已包含数据的表,以添加具有此类检查约束的列

布雷克


你只用了1分钟就找到了你自己问题的这么长的答案???@Stefan:我已经准备好了答案,所以1分钟实际上反映了我有多慢,而不是多快。好吧,至少根据FAQ,发布问题和答案是可以的。
CREATE TABLE t (
   pkey INTEGER NOT NULL PRIMARY KEY );

INSERT t VALUES ( 1 );
COMMIT;

CREATE FUNCTION is_filled_in ( 
   IN @value VARCHAR ( 100 ) )
RETURNS TINYINT
BEGIN
   IF COALESCE ( @value, '' ) <> '' THEN
      RETURN 1;
   ELSE 
      RETURN 0;
   END IF;
END;

ALTER TABLE t ADD c VARCHAR ( 3 ) DEFAULT 'xxx'
   CHECK ( is_filled_in ( c ) = 1 );

-- Works ok...
INSERT t VALUES ( 2, 'yyy' );
COMMIT;

-- Throws SQLCODE -209 Invalid value for column 'c' in table 't'...
INSERT t VALUES ( 3, '' );
COMMIT;

SELECT * FROM t;