Suggest a feature
×

Welcome to TagMyCode

Please login or create account to add a snippet.
0
0
 
0
Language: SQL
Posted by: Jon Nickerson
Added: Nov 8, 2017 2:38 PM
Modified: Mar 20, 2018 3:33 PM
Views: 17
Tags: no tags
  1. CREATE OR REPLACE FUNCTION fn_split(i_string       IN VARCHAR2, i_delimiter IN VARCHAR2 DEFAULT ',',
  2.                                     b_dedup_tokens IN NUMBER DEFAULT 0)
  3.   RETURN sys.DBMS_DEBUG_VC2COLL
  4. AS
  5.   l_tab sys.DBMS_DEBUG_VC2COLL;
  6.   BEGIN
  7.     SELECT regexp_substr(i_string, '[^' || i_delimiter || ']+', 1, level)
  8.     BULK COLLECT INTO l_tab
  9.     FROM dual
  10.     CONNECT BY regexp_substr(i_string, '[^' || i_delimiter || ']+', 1, level) IS NOT NULL
  11.     ORDER BY level;
  12.     IF (b_dedup_tokens > 0)
  13.     THEN
  14.       RETURN l_tab MULTISET UNION DISTINCT l_tab;
  15.     END IF;
  16.     RETURN l_tab;
  17.   END;
  18. ----------------------------------------
  19. DECLARE
  20.         delim        varchar2(10) := ':'; /*Apex uses a colon as delimiter*/
  21.         grab_first   varchar2(20) := '[^' || delim || ']+';
  22.         delim_first  varchar2(20) := '^.*?' || delim;
  23.         to_split     varchar2(300) := string_ || delim; /*'char0<delim>char1<delim>char2<delim>char3'*/
  24.         split_cache  varchar2(300);
  25.         split_result varchar2(300);
  26. BEGIN
  27.         split_cache := to_split;
  28.         while TRIM(UPPER(REPLACE(substr(split_cache
  29.                                                                                                                                  ,instr(split_cache, delim, 1, 1)
  30.                                                                                                                                  ,1)
  31.                                                                                                         ,delim
  32.                                                                                                         ,'X'))) = 'X'
  33.         loop
  34.                 split_result := TRIM(regexp_substr(split_cache, grab_first, 1, 1, 'i'));
  35.                 INSERT INTO some_table (some_column) VALUES (split_result);
  36.                 commit;
  37.                 split_cache := regexp_replace(split_cache, delim_first, '');
  38.         END loop;
  39. END;