oracle 一条sql查询树级区域信息 并且联合显示

执行一下三个对象语句 主要用于联合字符串

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;



原文地址:https://www.cnblogs.com/liaomin416100569/p/9331363.html