WITH
  FUNCTION same_characters_in_string(p_in_str IN varchar2) RETURN varchar2 IS
    v_que varchar2(32767):= p_in_str;
    v_res varchar2(32767);
    v_first varchar2(1);
    v_next  varchar2(1);
BEGIN
  v_first:= substr(v_que,1,1);
  IF v_first IS NULL THEN 
    v_res:= ' length:0 all characters are the same';
  ELSE
    FOR i IN 2..LENGTH(v_que)
    loop
      v_next:= substr(v_que,i,1); 
      IF v_first!= v_next THEN
        v_res:= ' length:'||LENGTH(v_que)||', first different character (0x'||rawtohex(utl_raw.cast_to_raw(v_next))||') at position:'|| i;
        exit;    
      END IF;     
   END loop;
   v_res:= nvl(v_res,' length:'||LENGTH(v_que)||' all characters are the same');
  END IF; 
  RETURN v_res;
END;

--Test
SELECT same_characters_in_string('') AS res FROM dual
UNION ALL 
SELECT same_characters_in_string('   ') AS res FROM dual
UNION ALL 
SELECT same_characters_in_string('2') AS res FROM dual
UNION ALL 
SELECT same_characters_in_string('333') AS res FROM dual
UNION ALL
SELECT same_characters_in_string('.55') AS res FROM dual
UNION ALL
SELECT same_characters_in_string('tttTTT') AS res FROM dual
UNION ALL 
SELECT same_characters_in_string('4444 444k') AS res FROM dual
;