Heim  >  Artikel  >  php教程  >  Detaillierte Erläuterung der Beispiele für benutzerdefinierte Oracle-Split-Funktionen

Detaillierte Erläuterung der Beispiele für benutzerdefinierte Oracle-Split-Funktionen

高洛峰
高洛峰Original
2017-01-06 13:03:431589Durchsuche

Benutzerdefinierte Teilungsfunktion von Oracle

Oracle bietet keine Teilungsfunktion, Sie können jedoch selbst eine Funktion erstellen, um diese Funktion zu implementieren. Beispiel: „abc defg hijkl nmopqr stuvw xyz“, das Trennzeichen ist ein Leerzeichen, aber die Anzahl der Leerzeichen ist variabel.

Quellcode:

CREATE OR REPLACE TYPE ty_str_split IS TABLE OF VARCHAR2 (4000);
 
CREATE OR REPLACE FUNCTION fn_var_split (
  p_str IN VARCHAR2,
  p_delimiter IN VARCHAR2
)
  RETURN ty_str_split
IS
  j INT := 0;
  len INT := 0;
  str VARCHAR2 (4000);
  str_split ty_str_split := ty_str_split ();
  v_str VARCHAR2 (4000) := RTRIM (LTRIM (p_str, p_delimiter), p_delimiter);
BEGIN
  len := LENGTH (v_str);
 
  WHILE len > 0
  LOOP
    j := INSTR (v_str, p_delimiter, 1);
 
    IF j = 0
    THEN
      str := SUBSTR (v_str, 1);
      len := 0;
      str_split.EXTEND;
      str_split (str_split.COUNT) := str;
    ELSE
      str := SUBSTR (v_str, 1, j - 1);
      v_str := LTRIM (LTRIM (v_str, str), p_delimiter);
      len := LENGTH (v_str);
      str_split.EXTEND;
      str_split (str_split.COUNT) := str;
    END IF;
  END LOOP;
 
  RETURN str_split;
END fn_var_split;
/

Test:
Ergebnis:

1
12
123
1234
12345
DECLARE
  CURSOR c
  IS
    SELECT * FROM TABLE (CAST (fn_var_split (';1;12;;123;;;1234;;;;12345;', ';') AS ty_str_split));
  r c%ROWTYPE;
BEGIN
  OPEN c;
  LOOP
    FETCH c INTO r;
    EXIT WHEN c%NOTFOUND;
    DBMS_OUTPUT.put_line (r.column_value);
  END LOOP;
  CLOSE c;
END;
/

Vielen Dank fürs Lesen, ich hoffe, es kann Ihnen helfen, danke Vielen Dank für Ihre Bewertung. Site-Support!

Weitere Beispiele für benutzerdefinierte Oracle-Split-Funktionen und verwandte Artikel finden Sie auf der chinesischen PHP-Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn