sql >> データベース >  >> RDS >> PostgreSQL

行タイプをチェックするときにISNOTNULLがfalseになるのはなぜですか?

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


    1. MySQLで先頭と末尾の文字を削除する方法

    2. 時間減算形式の結果

    3. OracleSQLDeveloperでCLOBフィールドデータをエクスポートする方法

    4. PL/pgSQLでのレコードのタプル構造の宣言