bugfix> postgresql > 投稿

次の機能があります。

CREATE OR REPLACE FUNCTION public.get_string(cmd_type text, udf_name text, 
group_name character varying DEFAULT 'usage'::character varying)
 RETURNS text
 LANGUAGE plpgsql
 AS $function$ 
BEGIN
 return 'This is the string: '''|| group_name ||''''::text;
END;
$function$

このように呼び出すと:

select public.get_string('test', 'myudf!', group_name=>null::character varying);

NULLを返します。

私はそれが少なくとも戻ると期待しています:

This is the string: ''

ただし、次のように呼び出すと:

select public.get_string('test', 'myudf!');

私は期待されます:

This is the string: 'usage'

オプションパラメータにNULLを渡すと、文字列全体がNULLになるのはなぜですか?

回答 1 件
  • それは神秘的ではありません-NULL値に対する操作は再びNULLです。

    postgres=# select ('Hello' || null) is null ;
    ┌──────────┐
    │ ?column? │
    ╞══════════╡
    │ t        │
    └──────────┘
    (1 row)
    
    

    あなたは coalesce を使用する必要があります  関数とNULL値に対するサニタイズ式。

    postgres=# select ('Hello' || coalesce(null,'')) ;
    ┌──────────┐
    │ ?column? │
    ╞══════════╡
    │ Hello    │
    └──────────┘
    (1 row)
    
    

    NULLと空の文字列が等しいOracleデータベースを知っているかもしれません。しかし、それはOracleにのみ当てはまり、NULLはNULLであり、より積極的です。

あなたの答え