Oracle自定义聚集函数
2010-06-24 18:35
411 查看
-- 创建对象类型
CREATE OR REPLACE TYPE T_LINK AS OBJECT (
STR VARCHAR2(30000),
STATIC FUNCTION ODCIAGGREGATEINITIALIZE(SCTX IN OUT T_LINK) RETURN NUMBER,
MEMBER FUNCTION ODCIAGGREGATEITERATE(SELF IN OUT T_LINK,VALUE IN VARCHAR2) RETURN NUMBER,
MEMBER FUNCTION ODCIAGGREGATETERMINATE(SELF IN T_LINK,RETURNVALUE OUT VARCHAR2,FLAGS IN NUMBER) RETURN NUMBER,
MEMBER FUNCTION ODCIAGGREGATEMERGE(SELF IN OUT T_LINK,CTX2 IN T_LINK) RETURN NUMBER
)
/
-- 建立包体
CREATE OR REPLACE TYPE BODY T_LINK IS
STATIC FUNCTION ODCIAGGREGATEINITIALIZE(SCTX IN OUT T_LINK) RETURN NUMBER
IS
BEGIN
SCTX := T_LINK(NULL);
RETURN ODCICONST.SUCCESS;
END;
MEMBER FUNCTION ODCIAGGREGATEITERATE (SELF IN OUT T_LINK, VALUE IN VARCHAR2) RETURN NUMBER
IS
BEGIN
SCTX.STR := SELF.STR || VALUE;
RETURN ODCICONST.SUCCESS;
END;
MEMBER FUNCTION ODCIAGGREGATETERMINATE(SELF IN T_LINK, RETURNVALUE OUT VARCHAR2, FLAGS IN NUMBE
R) RETURN NUMBER IS
BEGIN
RETURNVALUE :=SELF.STR;
RETURN ODCICONST.SUCESS;
END;
END;
/
-- 创建函数
CREATE OR REPLACE FUNCTION F_LINK(P_STR VARCHAR2) RETURN VARCHAR2
AGGREGATE USING T_LINK;
/
-- 建表
CREATE TABLE TEST (ID NUMBER, NAME VARCHAR2(20));
-- 使用F_LINK
SELECT ID, F_LINK(NAME) NAME FROM TEST GROUP BY ID;
CREATE OR REPLACE TYPE T_LINK AS OBJECT (
STR VARCHAR2(30000),
STATIC FUNCTION ODCIAGGREGATEINITIALIZE(SCTX IN OUT T_LINK) RETURN NUMBER,
MEMBER FUNCTION ODCIAGGREGATEITERATE(SELF IN OUT T_LINK,VALUE IN VARCHAR2) RETURN NUMBER,
MEMBER FUNCTION ODCIAGGREGATETERMINATE(SELF IN T_LINK,RETURNVALUE OUT VARCHAR2,FLAGS IN NUMBER) RETURN NUMBER,
MEMBER FUNCTION ODCIAGGREGATEMERGE(SELF IN OUT T_LINK,CTX2 IN T_LINK) RETURN NUMBER
)
/
-- 建立包体
CREATE OR REPLACE TYPE BODY T_LINK IS
STATIC FUNCTION ODCIAGGREGATEINITIALIZE(SCTX IN OUT T_LINK) RETURN NUMBER
IS
BEGIN
SCTX := T_LINK(NULL);
RETURN ODCICONST.SUCCESS;
END;
MEMBER FUNCTION ODCIAGGREGATEITERATE (SELF IN OUT T_LINK, VALUE IN VARCHAR2) RETURN NUMBER
IS
BEGIN
SCTX.STR := SELF.STR || VALUE;
RETURN ODCICONST.SUCCESS;
END;
MEMBER FUNCTION ODCIAGGREGATETERMINATE(SELF IN T_LINK, RETURNVALUE OUT VARCHAR2, FLAGS IN NUMBE
R) RETURN NUMBER IS
BEGIN
RETURNVALUE :=SELF.STR;
RETURN ODCICONST.SUCESS;
END;
END;
/
-- 创建函数
CREATE OR REPLACE FUNCTION F_LINK(P_STR VARCHAR2) RETURN VARCHAR2
AGGREGATE USING T_LINK;
/
-- 建表
CREATE TABLE TEST (ID NUMBER, NAME VARCHAR2(20));
-- 使用F_LINK
SELECT ID, F_LINK(NAME) NAME FROM TEST GROUP BY ID;
相关文章推荐
- 自定义oracle聚集函数,类似于功能wm_concat
- Oracle中自定义聚集函数
- 对字符串的“sum”——在Oracle中自定义聚集函数的例子
- 对字符串的“sum”——在Oracle中自定义聚集函数的例子
- Oracle自定义聚集函数
- Oracle自定义聚集函数
- 一个Oracle自定义聚集函数的例子
- oracle自定义聚集函数实现列合并
- Oracle自定义聚集函数使用简介 把同一字段用‘,’隔开
- 他山之石,可以攻玉--Oracle自定义的聚集函数的强大功能
- Oracle自定义聚集函数 推荐
- Oracle自定义聚集函数
- Oracle自定义的聚集函数的强大功能
- Oracle自定义聚集函数
- 自定义oracle聚集函数,类似于功能wm_concat
- Oracle自定义聚集函数
- 对字符串的“sum”——在Oracle中自定义聚集函数的例子
- 自定义Oracle聚集函数:模拟SUM,MAX,AVG
- [收藏]在oracle里定义一个自定义字符串的聚集函数
- 使用Oracle自定义聚集函数实例