В тази статия давам пример за функция, която най-вече използвам за разделяне на низ в PL/SQL. Особено, когато пиша програма за импортиране на файл с разделители. Ето тази функция и пример за това как да я използвате.
PL/SQL функция за разделяне на низ
Тази функция приема четири параметъра и подробностите за тези параметри са както следва:
- Source_String :Низ за разделяне
- Позиция_на поле :Позиция на разделителя
- Непрекратен :False по подразбиране, но ако подадете True, тогава той ще добави посочения разделител в края на низа.
- Разграничител :По подразбиране е запетая ',', можете да подадете всеки друг разделител.
CREATE OR REPLACE FUNCTION GetString ( Source_string IN VARCHAR2, Field_position IN NUMBER, UnTerminated IN BOOLEAN DEFAULT FALSE, Delimiter IN VARCHAR2 DEFAULT ',') RETURN VARCHAR2 IS iPtrEnd PLS_INTEGER := 0; iPtrStart PLS_INTEGER := 0; vcSourceStrCopy VARCHAR2 (4000) := Source_string; BEGIN IF UnTerminated THEN vcSourceStrCopy := vcSourceStrCopy || Delimiter; END IF; IF Field_Position > 1 THEN iPtrStart := INSTR (vcSourceStrCopy, Delimiter, 1, Field_Position - 1) + LENGTH (Delimiter); ELSE iPtrStart := 1; END IF; iPtrEnd := INSTR (vcSourceStrCopy, Delimiter, 1, Field_Position); RETURN SUBSTR (vcSourceStrCopy, iPtrStart, (iPtrEnd - iPtrStart)); END GetString;
Пример:Използвайте тази функция в PL/SQL програма
SET SERVEROUTPUT ON; DECLARE v_string VARCHAR2 (1000) := 'Java|.Net|C|Oracle|PHP'; TYPE t_string IS TABLE OF VARCHAR2 (1000) INDEX BY BINARY_INTEGER; t_str_array t_string; BEGIN FOR i IN 1 .. 5 LOOP t_str_array (i) := getstring (v_string, i, TRUE, '|'); END LOOP; FOR j IN t_str_array.FIRST .. t_str_array.LAST LOOP DBMS_OUTPUT.put_Line (t_str_array (j)); END LOOP; END; /
Изход:
Java .Net C Oracle PHP PL/SQL procedure successfully completed.
Вижте също:
- Експортирайте данни в JSON с помощта на PL/SQL в Oracle 11g
- PL/SQL програма за отпечатване на данни за служители
-
merge update oracle не може да получи стабилен набор от редове
-
как да извикам един съхранен процес от прашник и да модифицирам рекурсора, който се връща?
-
База данни срещу пространство за таблици, каква е разликата?
-
Как да получите името на месеца от дата в Oracle
-
Предотвратяване на отпадане на таблица в целева схема в Oracle Streams