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

首頁 > 數據庫 > Oracle > 正文

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

2020-07-26 14:31:01
字體:
來源:轉載
供稿:網友
最近項目中有很多需要做批量操作的需求,客戶端把一組逗號分隔的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
在线视频欧美日韩| 欧美综合一区第一页| 国产欧美一区二区三区四区| 91亚洲永久免费精品| 日韩av中文字幕在线免费观看| 在线观看欧美日韩国产| 精品成人国产在线观看男人呻吟| 精品国产一区av| 精品亚洲一区二区三区在线观看| 亚洲精品国产综合区久久久久久久| 亚洲电影免费观看| 久久亚洲国产成人| 久久久久久成人精品| 最近中文字幕日韩精品| 亚洲已满18点击进入在线看片| 欧美日韩在线视频观看| 亚洲美女免费精品视频在线观看| 97香蕉久久夜色精品国产| 在线色欧美三级视频| 91视频国产精品| 欧美精品激情在线| 亚洲最大的成人网| 久久久精品视频成人| 最近的2019中文字幕免费一页| 亚洲免费电影在线观看| 精品高清美女精品国产区| 欧美激情亚洲激情| 日韩精品视频免费专区在线播放| 亚洲va久久久噜噜噜久久天堂| 亚洲加勒比久久88色综合| 久久精品国产久精国产一老狼| 国产午夜精品全部视频在线播放| 亚洲最大成人在线| 国产成人精品av在线| 亚洲欧美日韩精品久久| 欧美在线观看一区二区三区| 91日本视频在线| 不卡伊人av在线播放| 青草热久免费精品视频| 成人春色激情网| 亚洲国语精品自产拍在线观看| 在线日韩日本国产亚洲| 精品国产精品自拍| 午夜精品一区二区三区视频免费看| 欧美中文在线字幕| 亚洲成人久久久| 8x海外华人永久免费日韩内陆视频| 日韩在线中文字| 久久全球大尺度高清视频| 亚洲第一偷拍网| 亚洲国产精彩中文乱码av| 精品国产美女在线| 日韩高清人体午夜| 久久久国产精彩视频美女艺术照福利| 亚洲天堂网在线观看| 亚洲国产日韩欧美在线99| 亚洲国产一区二区三区四区| 亚洲国产精品一区二区久| 日韩精品视频在线免费观看| 日韩亚洲欧美中文在线| 国产精品成人观看视频国产奇米| 国产盗摄xxxx视频xxx69| 国产精品无av码在线观看| 成人国内精品久久久久一区| 久久久久久免费精品| 欧美色欧美亚洲高清在线视频| 亚洲天堂日韩电影| 啪一啪鲁一鲁2019在线视频| 国产成人亚洲综合91| 一区国产精品视频| 日韩av在线免费观看一区| 亚洲精品久久久久| 欧美视频一二三| 亚洲免费人成在线视频观看| 日韩在线视频观看| 国产成人涩涩涩视频在线观看| 狠狠做深爱婷婷久久综合一区| 欧美夫妻性生活xx| 久久的精品视频| 亚洲香蕉成人av网站在线观看| 97视频国产在线| 亚洲国产精品久久久久秋霞蜜臀| 亚洲人成在线观看| 91精品久久久久久久久久久久久| 欧美男插女视频| 欧美人与性动交a欧美精品| 国产精品视频中文字幕91| 色黄久久久久久| 国产成人精品久久亚洲高清不卡| 欧美日韩国产精品一区二区不卡中文| 亚洲激情在线观看视频免费| 国产做受69高潮| 欧美高清视频一区二区| 欧美性xxxxx极品| 欧美国产日韩一区| 亚洲欧美国产一区二区三区| 福利视频第一区| 欧美午夜影院在线视频| 日韩成人av一区| 亚洲精品一区av在线播放| 最近2019年好看中文字幕视频| 中文字幕亚洲天堂| 久久视频在线观看免费| 国产精品999999| 中国人与牲禽动交精品| 成人国产精品日本在线| 亚洲a在线观看| 亚洲欧美在线一区二区| 一区二区三区日韩在线| 日韩欧美国产一区二区| 久久av在线播放| 伦伦影院午夜日韩欧美限制| 色yeye香蕉凹凸一区二区av| 国产福利精品av综合导导航| 久久天天躁夜夜躁狠狠躁2022| 国产精品久久中文| 日韩电影大全免费观看2023年上| 欧美孕妇性xx| 97在线视频一区| 欧美激情免费视频| 国产免费一区二区三区在线能观看| 色妞欧美日韩在线| 国产精品欧美一区二区三区奶水| 欧美黑人xxxⅹ高潮交| 国产欧美精品一区二区三区介绍| 精品久久久91| 欧美成人合集magnet| 国语自产精品视频在线看一大j8| 欧美在线观看日本一区| 国内精品视频一区| 久久中文精品视频| 一区二区日韩精品| 日韩一二三在线视频播| 91久久嫩草影院一区二区| 国产精品天天狠天天看| 亚洲精品免费在线视频| 国产精品久久久久秋霞鲁丝| 91精品久久久久久久久| 欧美日韩性生活视频| 欧美寡妇偷汉性猛交| 日本一本a高清免费不卡| 日韩精品欧美国产精品忘忧草| 欧美在线视频一二三| 亚洲国产高清福利视频| 国产午夜精品美女视频明星a级| 久久国产精彩视频| 在线一区二区日韩| 91在线视频一区| 97视频在线观看免费| 亚洲人成电影网站色www| 欧美多人乱p欧美4p久久| 国产精品香蕉国产| 成人中文字幕在线观看| 欧美丝袜美女中出在线| 亚洲国产毛片完整版| 欧美亚洲视频一区二区| 超碰日本道色综合久久综合| 国产不卡一区二区在线播放| 久久99久久久久久久噜噜| 欧美午夜精品久久久久久人妖| 中国china体内裑精亚洲片| 国产精品久久久久久久久久| 久久91精品国产91久久跳| 97超级碰碰人国产在线观看|