Trong bài viết này, tôi đưa ra một ví dụ về một hàm mà tôi thường sử dụng để tách một chuỗi trong PL / SQL. Đặc biệt, khi tôi đang viết một chương trình để nhập một tệp được phân tách. Đây là chức năng đó và một ví dụ về cách sử dụng nó.
PL / SQL Hàm để tách một chuỗi
Hàm này có bốn tham số và chi tiết của các tham số này như sau:
- Source_String :Chuỗi để tách
- Field_Position :Vị trí dấu phân cách
- Chưa được chấm dứt :Sai theo mặc định, nhưng nếu bạn chuyển True, thì nó sẽ thêm dấu phân cách đã chỉ định vào cuối chuỗi.
- Dấu phân cách :Mặc định là Dấu phẩy ',', bạn có thể chuyển bất kỳ dấu phân cách nào khác.
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;
Ví dụ:Sử dụng Hàm này trong Chương trình 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; /
Đầu ra:
Java .Net C Oracle PHP PL/SQL procedure successfully completed.
Xem thêm:
- Xuất dữ liệu sang JSON bằng PL / SQL trong Oracle 11g
- Chương trình PL / SQL để in thông tin chi tiết về nhân viên