加強型WM_CONCAT2函式(不受32767限制的CLOB型別)
CREATE OR REPLACE TYPE WM_CONCAT_IMPL2 AS OBJECT
-- AUTHID CURRENT_USER AS OBJECT
(
CURR_STR nclob, -- 原來為varchar2(32767)
STATIC FUNCTION ODCIAGGREGATEINITIALIZE(SCTX IN OUT WM_CONCAT_IMPL2) RETURN NUMBER,
MEMBER FUNCTION ODCIAGGREGATEITERATE(SELF IN OUT WM_CONCAT_IMPL2,
P1 IN nclob) RETURN NUMBER,
MEMBER FUNCTION ODCIAGGREGATETERMINATE(SELF IN WM_CONCAT_IMPL2,
RETURNVALUE OUT nclob,
FLAGS IN NUMBER)
RETURN NUMBER,
MEMBER FUNCTION ODCIAGGREGATEMERGE(SELF IN OUT WM_CONCAT_IMPL2,
SCTX2 IN WM_CONCAT_IMPL2) RETURN NUMBER
)
;
--定義型別body:
CREATE OR REPLACE TYPE BODY WM_CONCAT_IMPL2
IS
STATIC FUNCTION ODCIAGGREGATEINITIALIZE(SCTX IN OUT WM_CONCAT_IMPL2)
RETURN NUMBER
IS
BEGIN
SCTX := WM_CONCAT_IMPL2(NULL) ;
RETURN ODCICONST.SUCCESS;
END;
MEMBER FUNCTION ODCIAGGREGATEITERATE(SELF IN OUT WM_CONCAT_IMPL2,
P1 IN nclob)
RETURN NUMBER
IS
BEGIN
IF(CURR_STR IS NOT NULL) THEN
CURR_STR := CURR_STR || ',' || P1;
ELSE
CURR_STR := P1;
END IF;
RETURN ODCICONST.SUCCESS;
END;
MEMBER FUNCTION ODCIAGGREGATETERMINATE(SELF IN WM_CONCAT_IMPL2,
RETURNVALUE OUT nclob,
FLAGS IN NUMBER)
RETURN NUMBER
IS
BEGIN
RETURNVALUE := CURR_STR ;
RETURN ODCICONST.SUCCESS;
END;
MEMBER FUNCTION ODCIAGGREGATEMERGE(SELF IN OUT WM_CONCAT_IMPL2,
SCTX2 IN WM_CONCAT_IMPL2)
RETURN NUMBER
IS
BEGIN
IF(SCTX2.CURR_STR IS NOT NULL) THEN
SELF.CURR_STR := SELF.CURR_STR || ',' || SCTX2.CURR_STR ;
END IF;
RETURN ODCICONST.SUCCESS;
END;
END;
/
--自定義行變列函式:
CREATE OR REPLACE FUNCTION wm_concat2(P1 nclob)
RETURN nclob AGGREGATE USING WM_CONCAT_IMPL2 ;
/
create or replace procedure a_test(mycol in varchar2,
mytab in varchar2,
mywhere in varchar2,
mysql out varchar2,
my_cursor2 out sys_refcursor) as
my_cursor sys_refcursor;
mysql99 clob;
begin
mysql := 'select (''select ''''''||replace(wm_concat2(to_char(' || mycol ||
')),'','','''''','''''')||'''''' from dual'') from ' || mytab||' where 1=1 '||mywhere;
OPEN my_cursor FOR mysql;
FETCH my_cursor into mysql99;
OPEN my_cursor2 FOR mysql99;
end;
/
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/345618/viewspace-1060944/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle Long型別轉換為Clob型別Oracle型別
- PLSQL中慎用CLOB型別SQL型別
- 利用裝飾器給python的函式加上型別限制Python函式型別
- TypeScript 函式型別TypeScript函式型別
- php:給php增加函式強制型別返回PHP函式型別
- PHP實現強型別函式返回值PHP型別函式
- java jdbc存取oracle clob型別JavaJDBCOracle型別
- Python 序列型別以及函式引數型別Python型別函式
- Oracle中Clob型別處理解析Oracle型別
- input型別和限制型別
- 胡說-JavaScript函式型別JavaScript函式型別
- PostgreSQL:字元——型別及函式SQL字元型別函式
- javascript 函式引用型別和簡單型別傳參JavaScript函式型別
- 匿名型別是不是強型別?型別
- 淺談程式語言型別的強型別,弱型別,動態型別,靜態型別型別
- PHP:與型別有關的函式PHP型別函式
- C++14::lambda函式的型別C++函式型別
- LONG欄位型別向CLOB遷移型別
- 一個簡單函式—Number型別轉換Date型別函式型別
- 第 8 節:函式-函式型別與作用域函式型別
- 函式引數 引數定義函式型別函式型別
- string型別資料的find函式型別函式
- php 的函式引數值型別限定PHP函式型別
- php的函式引數值型別限定PHP函式型別
- JDBC 處理CLob和Blob型別資料JDBC型別
- Oracle 中LONG RAW BLOB CLOB型別介紹Oracle型別
- PLSQL Language Reference-PL/SQL資料型別-SQL資料型別-有限制的子型別SQL資料型別
- TypeScript 強大的型別別名TypeScript型別
- [C#]強型別C#型別
- 請別誤用 TypeScript 過載函式型別TypeScript函式型別
- PHP 型別轉換&&型別強制轉換PHP型別
- 強資料型別和弱資料型別資料型別
- 函式型介面函式
- 泛型函式泛型函式
- 檢測真實的檔案型別函式型別函式
- oracle集合型別的一些基本函式Oracle型別函式
- 建構函式定義的隱式型別轉換函式型別
- (轉)PLS_INTEGER型別與timestamp型別、date、及時間函式型別函式