执行一下三个对象语句 主要用于联合字符串
create or replace type strcat_type as object
(
currentstr varchar2(4000),
currentseprator varchar2(8),
static function ODCIAggregateInitialize(sctx IN OUT strcat_type) return number,
member function ODCIAggregateIterate(self IN OUT strcat_type,value IN VARCHAR2) return number,
member function ODCIAggregateTerminate(self IN strcat_type,returnValue OUT VARCHAR2, flags IN number) return number,
member function ODCIAggregateMerge(self IN OUT strcat_type,ctx2 IN strcat_type) return number
);
/
create or replace type body strcat_type is
static function ODCIAggregateInitialize(sctx IN OUT strcat_type) return number is
begin
sctx := strcat_type('',',');
return ODCIConst.Success;
end;
member function ODCIAggregateIterate(self IN OUT strcat_type, value IN VARCHAR2) return number is
begin
if self.currentstr is null then
self.currentstr := value;
else
self.currentstr := self.currentstr ||currentseprator || value;
end if;
return ODCIConst.Success;
end;
member function ODCIAggregateTerminate(self IN strcat_type, returnValue OUT VARCHAR2, flags IN number) return number is
begin
returnValue := self.currentstr;
return ODCIConst.Success;
end;
member function ODCIAggregateMerge(self IN OUT strcat_type, ctx2 IN strcat_type) return number is
begin
if ctx2.currentstr is null then
self.currentstr := self.currentstr;
elsif self.currentstr is null then
self.currentstr := ctx2.currentstr;
else
self.currentstr := self.currentstr || currentseprator || ctx2.currentstr;
end if;
return ODCIConst.Success;
end;
end;
/
CREATE OR REPLACE FUNCTION strcat (input VARCHAR2) RETURN VARCHAR2 PARALLEL_ENABLE AGGREGATE USING strcat_type;
/
表结构
-- Create table
create table T_ADDCODE
(
ADDCODE VARCHAR2(200),
ADDNAME VARCHAR2(200),
PADDCODE VARCHAR2(200),
CODELEVEL VARCHAR2(200),
ADDNAME1 VARCHAR2(200)
)
tablespace USERS
pctfree 10
initrans 1
maxtrans 255
storage
(
initial 64K
next 1M
minextents 1
maxextents unlimited
);
-- Add comments to the table
comment on table T_ADDCODE
is '区域信息';
-- Add comments to the columns
comment on column T_ADDCODE.ADDCODE
is 'addcode编码';
comment on column T_ADDCODE.ADDNAME
is '区域名称';
comment on column T_ADDCODE.PADDCODE
is '父编码';
comment on column T_ADDCODE.CODELEVEL
is '编码级别 1为最高级';
comment on column T_ADDCODE.ADDNAME1
is ' 全名';
查询的sql语句:
select strcat(addname) from (
select '1' as aaa,addname,addcode
from (select * from t_addcode order by addcode asc)
start with addcode = addcodeStr
connect by prior paddcode = addcode order by addcode
) group by aaa;