@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制約