Since you wanted a PL/SQL solution, you can create a function to split the string to an array and then use MULTISET operators:
Split Function:
From my previous answer
CREATE OR REPLACE FUNCTION split_String(
  i_str    IN  VARCHAR2,
  i_delim  IN  VARCHAR2 DEFAULT ','
) RETURN stringlist DETERMINISTIC
AS
  p_result       stringlist := stringlist();
  p_start        NUMBER(5) := 1;
  p_end          NUMBER(5);
  c_len CONSTANT NUMBER(5) := LENGTH( i_str );
  c_ld  CONSTANT NUMBER(5) := LENGTH( i_delim );
BEGIN
  IF c_len > 0 THEN
    p_end := INSTR( i_str, i_delim, p_start );
    WHILE p_end > 0 LOOP
      p_result.EXTEND;
      p_result( p_result.COUNT ) := SUBSTR( i_str, p_start, p_end - p_start );
      p_start := p_end + c_ld;
      p_end := INSTR( i_str, i_delim, p_start );
    END LOOP;
    IF p_start <= c_len + 1 THEN
      p_result.EXTEND;
      p_result( p_result.COUNT ) := SUBSTR( i_str, p_start, c_len - p_start + 1 );
    END IF;
  END IF;
  RETURN p_result;
END;
/
PL/SQL:
Then you can use it in a PL/SQL block:
DECLARE
  col1 VARCHAR2(4000) := 'QQQ,QQ,123,VVVV';
  col2 VARCHAR2(4000) := 'WWWW,VVV,QQQ';
  arr1 stringlist := SPLIT_STRING( col1 );
  arr2 stringlist := SPLIT_STRING( col2 );
  added   stringlist := arr1 MULTISET EXCEPT arr2;
  removed stringlist := arr2 MULTISET EXCEPT arr1;
BEGIN
  FOR i IN 1 .. added.COUNT LOOP
    DBMS_OUTPUT.PUT( added(i) || ',' );
  END LOOP;
  DBMS_OUTPUT.NEW_LINE();
  FOR i IN 1 .. removed.COUNT LOOP
    DBMS_OUTPUT.PUT( removed(i) || ',' );
  END LOOP;
  DBMS_OUTPUT.NEW_LINE();
END;
/
Which outputs:
dbms_output:
QQ,123,VVVV,
WWWW,VVV,
SQL:
If you want to implement it in SQL then with the test data:
CREATE TABLE test_data ( col1, col2 ) AS
SELECT 'QQQ,QQ,123,VVVV', 'WWWW,VVV,QQQ' FROM DUAL;
You can query it using:
SELECT ( SELECT LISTAGG( column_value, ',' ) WITHIN GROUP ( ORDER BY ROWNUM )
         FROM   TABLE( a.arr1 MULTISET EXCEPT a.arr2 ) ) AS added,
       ( SELECT LISTAGG( column_value, ',' ) WITHIN GROUP ( ORDER BY ROWNUM )
         FROM   TABLE( a.arr2 MULTISET EXCEPT a.arr1 ) ) AS removed
FROM   (
  SELECT SPLIT_STRING( col1 ) AS arr1,
         SPLIT_STRING( col2 ) AS arr2
  FROM   test_data
) a;
Which outputs:
ADDED       | REMOVED 
:---------- | :-------
QQ,123,VVVV | WWWW,VVV
db<>fiddle here
db<>fiddle here