Split a string using REGEXP and CONNECT BY...

This one having the advantage of not using the regexp_substr in the where clause,and - when using the techniques on actual tables - to avoid the usage of "prior sys_guid() is not null"

SELECT column_value AS id, REGEXP_SUBSTR('A,B,C,D', '[^,]+', 1, column_value) AS data
FROM DUAL
CROSS JOIN
  TABLE(CAST(MULTiSET(
    SELECT LEVEL FROM DUAL
      CONNECT BY LEVEL <= regexp_count('A,B,C,D', ',') + 1
   ) AS sys.odcinumberlist)
  )
;

Split a string using XMLTABLE

Yet another way - specific to ORACLE - to split a comma-separated string into a set of rows. More...

Count the number of NULL columns in each row

SQL is good at processing set of rows, but what about columns…
Here an easy way to count number of nulls in a set of columns per row.
More...