自定義聚集函式,仿wm_concat,使用CLOB,可處理超過4000長度字串
因開發需要,在使用wm_concat函式時,在字串長度超過4000後報錯,所以自定義一個類似的聚集函式,在內部使用CLOB處理,避免超長問題。
原始碼如下:
先以sys使用者授權:
grant execute on dbms_lob to xxx;
CREATE OR REPLACE TYPE typ_concat_clob AS OBJECT
(
concat_str CLOB,
splitstr CLOB,
--ODCIAggregateInitialize做一些初始化操作
STATIC FUNCTION ODCIAggregateInitialize(cs_ctx In Out typ_concat_clob) return number,
--ODCIAggregateIterate是主要的處理邏輯所在,這裡定義一個迭代操作
member function ODCIAggregateIterate(self In Out typ_concat_clob,srcvalue in VARCHAR2) return number,
-- ODCIAggregateMerge是一個合併函式,如果在使用時指定了partition enabled,就必須定義此函式,用來把並行處理的結果進行合併
member function ODCIAggregateMerge(self In Out typ_concat_clob,ctx2 In Out typ_concat_clob) return number,
--ODCIAggregateTerminate是一個終止函式,顧名思義,在這個函式中對結果做最後處理並返回
member function ODCIAggregateTerminate(self In Out typ_concat_clob,returnValue Out CLOB,flags IN NUMBER) return number
)
CREATE OR REPLACE TYPE BODY typ_concat_clob IS
STATIC FUNCTION ODCIAggregateInitialize(cs_ctx In Out typ_concat_clob) return NUMBER
IS
BEGIN
cs_ctx := typ_concat_clob(to_clob(','),to_clob(','));
RETURN ODCICONST.SUCCESS;
END;
member function ODCIAggregateIterate(self In Out typ_concat_clob,srcvalue IN VARCHAR2) return NUMBER
IS
BEGIN
dbms_lob.append(self.concat_str,to_clob(srcvalue));
dbms_lob.append(self.concat_str,self.splitstr);
RETURN ODCICONST.SUCCESS;
END;
member function ODCIAggregateMerge(self In Out typ_concat_clob,ctx2 In Out typ_concat_clob) return NUMBER
IS
BEGIN
IF ctx2 IS NOT NULL THEN
dbms_lob.append(self.concat_str,ctx2.concat_str);
END IF;
RETURN ODCICONST.SUCCESS;
END;
member function ODCIAggregateTerminate(self In Out typ_concat_clob,returnValue Out CLOB,flags IN NUMBER) return NUMBER
IS
BEGIN
dbms_lob.trim(self.concat_str,dbms_lob.getlength(self.concat_str)-1);
self.concat_str := dbms_lob.substr(self.concat_str,dbms_lob.getlength(self.concat_str)-1,2);
returnValue := self.concat_str;
RETURN ODCICONST.SUCCESS;
END;
END;
/
CREATE OR REPLACE FUNCTION fun_concat_clob(in_str VARCHAR2) RETURN CLOB
AGGREGATE USING typ_concat_clob;
/
使用和wm_concat一樣,不同的是內部處理和返回值都是CLOB型別的:
SELECT fun_concat_clob(name) FROM students GROUP BY class;
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28998293/viewspace-1353103/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle自定義聚集函式Oracle函式
- Oracle自定義聚集函式薦Oracle函式
- 轉:對字串的“sum”——在Oracle中自定義聚集函式的例子字串Oracle函式
- oracle 10g 新增:自定義聚集函式Oracle 10g函式
- 使用者自定義聚集函式--求平均值(avg)--myavg函式
- MySQL使用之五_自定義函式和自定義過程MySql函式
- SqlServer——字串處理函式SQLServer字串函式
- 安全字串處理函式字串函式
- oracle函式大全-字串處理函式Oracle函式字串
- Logmnr獲取SQL長度超過4000的問題SQL
- php字串處理函式大全PHP字串函式
- SQL字串處理函式大全SQL字串函式
- SQL Server字串處理函式大全SQLServer字串函式
- C語言之字串處理函式C語言字串函式
- C學習--自定義字串連線函式字串函式
- 語音訊號處理獲取 NFFT 的自定義函式音訊FFT函式
- clob處理
- 使用自定義函式實現資料編解碼、格式處理與業務告警函式
- 往資料型別為clob的表列直接insert或update長度大於4000會報字串太長錯誤資料型別字串
- T-SQL——自定義函式解析JSON字串SQL函式JSON字串
- c語言字串處理函式大全C語言字串函式
- oracle 獲取字串長度函式length()和lengthb()Oracle字串函式
- oracle取字串長度的函式length()和hengthb()Oracle字串函式
- 產生10個長度不超過10的字串字串
- apiAutoTest:支援自定義函式,用例中可呼叫API函式
- cmp是可選的自定義比較函式函式
- 自定義一個可以接收空格的字串的函式字串函式
- 自定義函式實現字串分割,返回集合型別函式字串型別
- Oracle自定義函式檢視2個字串是否匹配Oracle函式字串
- wm_concat函式函式
- MySQL自定義函式與儲存過程MySql函式儲存過程
- python字串處理函式大總結Python字串函式
- shell自定義函式函式
- Oracle 自定義函式Oracle函式
- perl自定義函式函式
- oracle wm_concat(column)函式的使用Oracle函式
- C++常用字串處理函式及使用示例(轉)C++字串函式
- 函式索引使用細節——自定義函式的索引化函式索引