Test Case 1: Insert exact length
Query:
CREATE TABLE varchar2_test_1 (val VARCHAR2(5));
INSERT INTO varchar2_test_1 VALUES ('Hello');
SELECT val, LENGTH(val) FROM varchar2_test_1;
-- Output: 'Hello', LENGTH = 5
Test Case 2: Insert shorter string
Query:
CREATE TABLE varchar2_test_2 (val VARCHAR2(5));
INSERT INTO varchar2_test_2 VALUES ('Hi');
SELECT val, LENGTH(val) FROM varchar2_test_2;
-- Output: 'Hi', LENGTH = 2
-- Explanation: Stored as is, no padding
Test Case 3: Insert longer string (error)
Query:
CREATE TABLE varchar2_test_3 (val VARCHAR2(5));
INSERT INTO varchar2_test_3 VALUES ('Welcome');
-- ORA-12899: value too large for column "VARCHAR2_TEST_3"."VAL" (actual: 7, maximum: 5)
Test Case 4: Trailing spaces preserved and compared
Query:
CREATE TABLE varchar2_test_4 (val VARCHAR2(5));
INSERT INTO varchar2_test_4 VALUES ('ABC ');
SELECT val, LENGTH(val) FROM varchar2_test_4;
-- Output: 'ABC ', LENGTH = 5
Test Case 5: Comparison considers trailing spaces
Query:
SELECT CASE WHEN 'ABC' = 'ABC ' THEN 'Equal' ELSE 'Not Equal' END AS result FROM dual;
-- Output: Not Equal
-- Explanation: Unlike CHAR, VARCHAR2 does not ignore trailing spaces
Test Case 6: NULL vs empty string
SELECT CASE WHEN '' IS NULL THEN 'NULL' ELSE 'Not Null' END AS result FROM dual;
-- Output: NULL
-- Oracle treats empty string as NULL
Test Case 7: VARCHAR2(n CHAR) with multibyte characters
Query:
CREATE TABLE varchar2_test_7 (val VARCHAR2(5 CHAR));
INSERT INTO varchar2_test_7 VALUES ('你好啊'); -- Chinese for "Hi" (3 characters)
SELECT val, LENGTH(val), LENGTHB(val) FROM varchar2_test_7;
-- Output: val = '你好啊', LENGTH = 3, LENGTHB = depends on character set (e.g., 9 bytes in UTF-8)
Test Case 8: Insert special characters
Query:
CREATE TABLE varchar2_test_8 (val VARCHAR2(20));
INSERT INTO varchar2_test_8 VALUES ('Hello$%^@!');
SELECT val FROM varchar2_test_8;
-- Output: 'Hello$%^@!'
Test Case 9: Leading and trailing spaces
Query:
CREATE TABLE varchar2_test_9 (val VARCHAR2(10));
INSERT INTO varchar2_test_9 VALUES (' abc ');
SELECT val, LENGTH(val) FROM varchar2_test_9;
-- Output: ' abc ', LENGTH = 7
-- Oracle preserves both leading and trailing spaces in VARCHAR2
No comments:
Post a Comment