oracle中的分割函数(split效果)
CREATE OR REPLACE FUNCTION fn_split (p_str IN VARCHAR2, p_delimiter IN VARCHAR2) RETURN ty_str_split --分割函数 -- 新建前要先建立ty_str_split 执行语句为:CREATE OR REPLACE TYPE ty_str_split IS TABLE OF VARCHAR2 (4000); IS j INT := 0; i INT := 1; len INT := 0; len1 INT := 0; str VARCHAR2 (4000); str_split ty_str_split := ty_str_split (); BEGIN len := LENGTH (p_str); len1 := LENGTH (p_delimiter); WHILE j < len LOOP j := INSTR (p_str, p_delimiter, i); IF j = 0 THEN j := len; str := SUBSTR (p_str, i); str_split.EXTEND; str_split (str_split.COUNT) := str; IF i >= len THEN EXIT; END IF; ELSE str := SUBSTR (p_str, i, j - i); i := j + len1; str_split.EXTEND; str_split (str_split.COUNT) := str; END IF; END LOOP; RETURN str_split; END fn_split; -- 使用方式 select * from table(fn_split('1,2',',')) select COLUMN_VALUE from table(fn_split('1,2',',')) -- 在存储过程中的使用 IS S_AAC001 SPLIT_ARRAY := SPLIT_ARRAY(); V_CALLBACK VARCHAR2(1000); XCOUNT NUMBER; BEGIN V_CALLBACK := REPLACE(P_AAC001S, '"', ''); S_AAC001 := F_SPLIT(V_CALLBACK, ','); SELECT ((LENGTH(V_CALLBACK) - LENGTH(REPLACE(V_CALLBACK, ','))) / LENGTH(',')) INTO XCOUNT FROM DUAL; FOR I IN 0 .. XCOUNT - 1 LOOP SELECT a INTO a FROM t_a WHERE a = S_AAC001(I + 1); END LOOP; EXCEPTION WHEN OTHERS THEN --ROLLBACK; PRM_APPCODE := -1; PRM_ERRORMSG := '过程执行失败!错误信息:' || SQLERRM; END;
1 | 1111111111111 |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix