@Pavelが提供したように、チェック<row-type> IS NOT NULL
期待どおりに機能しません。 TRUE
を返します if(そしてその場合のみ)すべての単一列 NOT NULL
です 。
特殊変数FOUND
をテストします 代わりに(@Mikeがコメントしたように):
CREATE OR REPLACE FUNCTION registration(wr text)
RETURNS integer AS
$rL$
...
SELECT * INTO rowt FROM email WHERE email_email = eml;
IF FOUND THEN
RAISE EXCEPTION 'email address, %, already registered.', eml;
END IF;
...
$rL$ LANGUAGE plpgsql;
または テストで表現を逆にすることができます。
IF rowt IS NULL THEN
-- do nothing
ELSE
RAISE EXCEPTION 'email address, %, already registered.' , eml;
END IF;
見つかった既存の行には、NOT NULL
である列が少なくとも1つ含まれています したがって、rowt IS NULL
TRUE
のみを返します 何も見つからない場合。
詳細と関連する回答:
- 変数が設定されている場合、レコードのISNOTNULLテストはTRUEを返しません
- 一連の列に対するNOTNULL制約