1または0を返すユーザー定義のSQL関数があり、列のCHECK制約から呼び出したいと思います。
5147 次
1 に答える
4
はい。SQL Anywhereにはブールデータ型がないため、TRUE、FALSE、またはUNKNOWNを生成する述語をコーディングする必要があります。つまり、関数が合格または不合格の場合に1または0を返す場合は、制約をCHECK(f()= 1)としてコーディングする必要があります。
TRUEとUNKNOWNはどちらも「パス」になることに注意してください。FALSEの結果のみがチェックに失敗します。
次のサンプルは、すでにデータが含まれているテーブルを変更して、そのようなCHECK制約を持つ列を追加する方法を示しています。
ブレック
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;
于 2009-05-04T12:30:53.497 に答える