亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 數據庫 > Oracle > 正文

給Oracle添加split和splitstr函數的方法

2024-08-29 13:55:51
字體:
來源:轉載
供稿:網友
最近項目中有很多需要做批量操作的需求,客戶端把一組逗號分隔的ID字符串傳給數據庫,存儲過程就需要把它們分割,然后逐個處理。
以往的處理方式有如下幾種:

1、在存儲過程內寫循環,逐個分析字符串中的ID,然后逐個處理。缺點:循環一次處理一個,如果每次判斷都很多,效率將很受影響。適合每次處理要做單獨判斷的情況。

2、使用臨時表,先調用一個存儲過程將ID拆分并插入到臨時表中,然后結合臨時表可以寫SQL一次處理多筆。缺點:需要插臨時表,效率不高,數據量越大影響越嚴重。

以前的項目用的最多的還是第2中方式,畢竟方便,且效率比第1種好。
現在項目中用到了很多很多的批量操作,很多的重復代碼讓我不厭其煩。忽然想到,.Net和JS中都有split類似的函數,拆分字符串很方便,oracle中要是也有這樣的功能該多好呀。

多方查找資料發現,給oracle添加split函數是完全可以實現的,避免了插入臨時表,所以效率比上面的第2中方法效率高很多。

后來我還添加了splitstr函數,可以很方便獲取字符串中的指定節點。
有了這兩個函數,處理批量操作,真是如虎添翼,效率倍增,嘿嘿……
好了,閑話少說,上代碼!如有不妥之處,請各位前輩博友斧正。

復制代碼 代碼如下:


/*
* Oracle 創建 split 和 splitstr 函數
*/
/* 創建一個表類型 */
create or replace type tabletype as table of VARCHAR2(32676)
/
/* 創建 split 函數 */
CREATE OR REPLACE FUNCTION split (p_list CLOB, p_sep VARCHAR2 := ',')
RETURN tabletype
PIPELINED
/**************************************
* Name: split
* Author: Sean Zhang.
* Date: 2012-09-03.
* Function: 返回字符串被指定字符分割后的表類型。
* Parameters: p_list: 待分割的字符串。
p_sep: 分隔符,默認逗號,也可以指定字符或字符串。
* Example: SELECT *
FROM users
WHERE u_id IN (SELECT COLUMN_VALUE
FROM table (split ('1,2')))
返回u_id為1和2的兩行數據。
**************************************/
IS
l_idx PLS_INTEGER;
v_list VARCHAR2 (32676) := p_list;
BEGIN
LOOP
l_idx := INSTR (v_list, p_sep);
IF l_idx > 0
THEN
PIPE ROW (SUBSTR (v_list, 1, l_idx - 1));
v_list := SUBSTR (v_list, l_idx + LENGTH (p_sep));
ELSE
PIPE ROW (v_list);
EXIT;
END IF;
END LOOP;
END;
/
/* 創建 splitstr 函數 */
CREATE OR REPLACE FUNCTION splitstr (str IN CLOB,
i IN NUMBER := 0,
sep IN VARCHAR2 := ','
)
RETURN VARCHAR2
/**************************************
* Name: splitstr
* Author: Sean Zhang.
* Date: 2012-09-03.
* Function: 返回字符串被指定字符分割后的指定節點字符串。
* Parameters: str: 待分割的字符串。
i: 返回第幾個節點。當i為0返回str中的所有字符,當i 超過可被分割的個數時返回空。
sep: 分隔符,默認逗號,也可以指定字符或字符串。當指定的分隔符不存在于str中時返回sep中的字符。
* Example: select splitstr('abc,def', 1) as str from dual; 得到 abc
select splitstr('abc,def', 3) as str from dual; 得到 空
**************************************/
IS
t_i NUMBER;
t_count NUMBER;
t_str VARCHAR2 (4000);
BEGIN
IF i = 0
THEN
t_str := str;
ELSIF INSTR (str, sep) = 0
THEN
t_str := sep;
ELSE
SELECT COUNT ( * )
INTO t_count
FROM table (split (str, sep));
IF i <= t_count
THEN
SELECT str
INTO t_str
FROM (SELECT ROWNUM AS item, COLUMN_VALUE AS str
FROM table (split (str, sep)))
WHERE item = i;
END IF;
END IF;
RETURN t_str;
END;
/

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
中文字幕少妇一区二区三区| 亚洲韩国欧洲国产日产av| 久久精品精品电影网| 一区二区三区精品99久久| 激情亚洲一区二区三区四区| 亚洲一区二区久久| 欧美一区亚洲一区| 久久艳片www.17c.com| 国产69久久精品成人| 亚洲高清在线观看| 国产精品网址在线| 亚洲最大的成人网| 少妇高潮久久久久久潘金莲| 国产精品视频一区二区高潮| 国产精品一区二区三区久久久| 成人免费观看49www在线观看| 欧美一级免费视频| 91成人在线视频| 亚洲欧洲国产伦综合| 中文字幕免费精品一区| 日本成人激情视频| 亚洲精品一区二区网址| 精品亚洲国产视频| 欧美日本高清视频| 欧美精品制服第一页| www欧美日韩| 色偷偷噜噜噜亚洲男人的天堂| 精品国内产的精品视频在线观看| 久久精品国亚洲| 亚洲黄色av女优在线观看| 亚洲国产女人aaa毛片在线| 亚洲福利视频久久| 欲色天天网综合久久| 日本高清不卡在线| 91久久精品一区| 日韩欧美在线播放| 亚洲精品在线91| 亚洲黄色在线观看| 国产成人亚洲综合青青| 国产欧美精品久久久| 精品成人国产在线观看男人呻吟| 夜夜嗨av色一区二区不卡| 亚洲丝袜av一区| 91精品久久久久久久久| 久色乳综合思思在线视频| 69精品小视频| 久久深夜福利免费观看| 亚洲毛片在线免费观看| 少妇高潮 亚洲精品| 久久99精品久久久久久琪琪| 国产区精品在线观看| 久久夜色精品亚洲噜噜国产mv| 在线成人激情黄色| 中文字幕日韩有码| 亚洲成av人影院在线观看| 一区二区欧美在线| 日韩一区二区av| 国产一区二区日韩精品欧美精品| 欧美激情国产日韩精品一区18| 亚洲精品电影在线观看| 4p变态网欧美系列| 亚洲伦理中文字幕| 日韩成人xxxx| 亚洲女成人图区| 91牛牛免费视频| 国产在线999| 亚洲国产中文字幕久久网| 亚洲电影在线看| 日韩电影免费观看在线| 国产精品av在线| 欧美人在线视频| 国产精品热视频| 亚洲3p在线观看| 欧美成人精品一区| 久久色免费在线视频| 色综合久久精品亚洲国产| www.美女亚洲精品| 青青久久av北条麻妃海外网| 久久久综合免费视频| 成人在线小视频| 日日噜噜噜夜夜爽亚洲精品| 久久精品国产精品亚洲| 日韩69视频在线观看| 北条麻妃99精品青青久久| 欧美高清电影在线看| 欧美性猛交xxxxx免费看| 国产精品久久久久久网站| 日韩欧美视频一区二区三区| 性色av一区二区三区免费| 日韩免费中文字幕| 国产日韩欧美在线| 国产在线拍偷自揄拍精品| 欧美日韩中文字幕综合视频| 欧美寡妇偷汉性猛交| 久久久久国产精品免费网站| 91影视免费在线观看| 狠狠做深爱婷婷久久综合一区| 欧美老妇交乱视频| 国产aⅴ夜夜欢一区二区三区| 日本免费久久高清视频| 中文字幕av日韩| 欧美天堂在线观看| 日韩av在线高清| 国产精品青草久久久久福利99| 欧美性猛交xxxx免费看久久久| 欧美日韩在线另类| 亚洲国产精品一区二区三区| 日韩美女中文字幕| 亚洲人成77777在线观看网| 伊人久久大香线蕉av一区二区| 日韩av网站导航| 国产精品91免费在线| 国产精品国产亚洲伊人久久| 国产精品久久久久99| 国产精品女视频| 欧美一级视频免费在线观看| 欧美日韩国产第一页| 国产精品久久久久久av下载红粉| 成人做爰www免费看视频网站| 久久久久久久久久久国产| 久久久精品在线观看| 亚洲国产另类 国产精品国产免费| 欧美性猛交xxxx富婆| 7m精品福利视频导航| 视频在线观看99| 欧美日本啪啪无遮挡网站| 欧美巨乳在线观看| 亚洲第一免费播放区| 日韩欧美在线免费| 亚洲视屏在线播放| 国产精品aaaa| 欧美高清视频在线观看| 在线播放国产一区中文字幕剧情欧美| 国产精品电影网| 精品国产拍在线观看| 伊人伊成久久人综合网小说| 久久久久久com| 成人黄色免费片| 欧美第一黄网免费网站| 国产亚洲精品美女久久久| 午夜免费久久久久| 亚洲欧美日韩在线高清直播| 九九热视频这里只有精品| 成人免费激情视频| 久久久亚洲影院你懂的| 日日摸夜夜添一区| 欧美国产精品va在线观看| 亚洲丝袜一区在线| 日韩精品免费视频| 欧美中文字幕在线观看| 538国产精品一区二区在线| 都市激情亚洲色图| 欧美性猛交xxxx富婆| 日本a级片电影一区二区| 亚洲欧美三级在线| 亚洲综合在线中文字幕| 97香蕉久久超级碰碰高清版| 亚洲欧美日韩精品久久奇米色影视| 亚洲日韩欧美视频| 91久久久国产精品| 成人免费网视频| 国内精品久久久久影院 日本资源| 亚洲欧洲日产国码av系列天堂| 久久91精品国产91久久跳|