I found this functional surprise while responding to questions about my previous article. When you invoke the GET_KEYS method of JSON_OBJECT_T, if the collection is empty, 19c will return a NULL value; 21c will return a JSON_KEY_LIST collection of 0 elements.
19c
SQL> DECLARE
2 v_version VARCHAR2(20);
3 v_compatible VARCHAR2(20);
4 v_keylist json_key_list;
5 BEGIN
6 DBMS_UTILITY.db_version(v_version, v_compatible);
7 DBMS_OUTPUT.put_line(v_version);
8 DBMS_OUTPUT.put_line(v_compatible);
9 v_keylist := json_object_t('{}').get_keys;
10
11 IF v_keylist IS NULL
12 THEN
13 DBMS_OUTPUT.put_line('Null json_key_list ');
14 ELSE
15 DBMS_OUTPUT.put_line(
16 'json_key_list of ' || TO_CHAR(v_keylist.COUNT) || ' elements');
17 END IF;
18 END;
19 /
19.0.0.0.0
19.0.0
Null json_key_list
21c
SQL> DECLARE
2 v_version VARCHAR2(20);
3 v_compatible VARCHAR2(20);
4 v_keylist json_key_list;
5 BEGIN
6 DBMS_UTILITY.db_version(v_version, v_compatible);
7 DBMS_OUTPUT.put_line(v_version);
8 DBMS_OUTPUT.put_line(v_compatible);
9 v_keylist := json_object_t('{}').get_keys;
10
11 IF v_keylist IS NULL
12 THEN
13 DBMS_OUTPUT.put_line('Null json_key_list ');
14 ELSE
15 DBMS_OUTPUT.put_line(
16 'json_key_list of ' || TO_CHAR(v_keylist.COUNT) || ' elements');
17 END IF;
18 END;
19* /
21.0.0.0.0
21.0.0
json_key_list of 0 elements
I originally did my testing on 21c and 23c databases for my prior article, I had to go back and make an update to make it backward compatible for 19c and lower versions as well.