1.char型とvarchar型を比較する場合、char型にスペースが埋められる点を考慮する必要がある。
2.char型同士の比較であれば桁数を気にしなくてよい。
3.SUBSTRなど関数を使用した場合、スペースを考慮する必要がある。(関数の戻り値はchar型ではない??)
以下、実験結果
SET SERVEROUTPUT ON; DECLARE NAME1 CHAR(10); NAME2 VARCHAR2(10); NAME3 CHAR(5); BEGIN NAME1 := 'HOGE1'; NAME2 := 'HOGE1'; NAME3 := 'HOGE1'; --1.CHAR型とVARCHARの比較 IF NAME1 = NAME2 THEN DBMS_OUTPUT.PUT_LINE('EQUAL'); ELSE DBMS_OUTPUT.PUT_LINE('NG'); END IF; --2.桁数の異なるCHAR型の比較 IF NAME1 = NAME3 THEN DBMS_OUTPUT.PUT_LINE('EQUAL'); ELSE DBMS_OUTPUT.PUT_LINE('NG'); END IF; --3.SUBSTR関数の戻り値と比較 IF NAME1 = SUBSTR(NAME3,1,5) THEN DBMS_OUTPUT.PUT_LINE('EQUAL'); ELSE DBMS_OUTPUT.PUT_LINE('NG'); END IF; END; /
上記の実行結果は
1→NG
2→EQUAL
3→NG
動作確認環境: Oracle10.2.0.4.0