【PL/SQL】空文字の扱い

2020年7月27日

Oracleでは、PL/SQL・SQLの両方で、空文字(0バイト文字列)をNULLとして扱います。
SQLServer、DB2、MySQLでは空文字とNULLは別物として扱います。

PL/SQLの場合

変数「AAA」に空文字を設定した場合、変数の値は「NULL」となります。
変数値がNULLとなる為、(1)は通りません。
正しい判定(IF)としては「IS NULL」とします。(2)は通ります。
半角スペースを除外して値が設定されているか確認したい場合は、「RTRIM※」でスペースを除去するとNULLとなるので「IS NULL」で判定します。(3)は通ります。
※「RTRIM」を使用しているのは、古いOracleでは「TRIM」命令がなかった為です。動作としては「LTRIM」・「TRIM」・「RTRIM」のどれを使用しても同じです。

DECLARE
    AAA VARCHAR2(10);
BEGIN
    AAA := '';
 
    IF AAA = '' THEN
        NULL; --ここは通らない (1)
    END IF;
 
    IF AAA IS NULL THEN
        NULL; --ここは通る (2)
    END IF;
 
    AAA := '   ';
 
    IF RTRIM(AAA) IS NULL THEN
        NULL; --ここは通る (3)
    END IF;
END

SQLの場合

例えば、「TBL」テーブルの「AAA」項目に空文字が設定されているつもりの場合、
SELECT * FROM TBL WHERE (AAA = ")
は該当レコードが0件となります。
正しくは、
SELECT * FROM TBL WHERE (AAA IS NULL)
です。
設定されているつもりと書いたのは、そもそもテーブルに空文字を登録できない為です。

UPDATE TBL SET
AAA = "

とした場合、「AAA」項目の値は「NULL」となります。

【PL/SQL】メニュー

サイトマップ

2020年7月27日Oracle,PL/SQL,SQL,データベース,プログラム

Posted by こっぷ