Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    primarykey
    data
    text
    <p>You can either use the built-in (but deprecated) STRAGG function</p> <pre><code> select sys.stragg(distinct name) from t </code></pre> <p>(please note that distinct seems to be necessary to avoid duplicates)</p> <p>or define your own aggregation function / type:</p> <pre><code>CREATE OR REPLACE TYPE "STRING_AGG_TYPE" as object ( total varchar2(4000), static function ODCIAggregateInitialize(sctx IN OUT string_agg_type) return number, member function ODCIAggregateIterate(self IN OUT string_agg_type, value IN varchar2) return number, member function ODCIAggregateTerminate(self IN string_agg_type, returnValue OUT varchar2, flags IN number) return number, member function ODCIAggregateMerge(self IN OUT string_agg_type, ctx2 IN string_agg_type) return number ); CREATE OR REPLACE TYPE BODY "STRING_AGG_TYPE" is static function ODCIAggregateInitialize(sctx IN OUT string_agg_type) return number is begin sctx := string_agg_type(null); return ODCIConst.Success; end; member function ODCIAggregateIterate(self IN OUT string_agg_type, value IN varchar2) return number is begin -- prevent buffer overflow for more than 4,000 characters if nvl(length(self.total), 0) + nvl(length(value), 0) &lt; 4000 then self.total := self.total || ';' || value; end if; return ODCIConst.Success; end; member function ODCIAggregateTerminate(self IN string_agg_type, returnValue OUT varchar2, flags IN number) return number is begin returnValue := ltrim(self.total, ';'); return ODCIConst.Success; end; member function ODCIAggregateMerge(self IN OUT string_agg_type, ctx2 IN string_agg_type) return number is begin self.total := self.total || ctx2.total; return ODCIConst.Success; end; end; CREATE OR REPLACE FUNCTION stragg(input varchar2 ) RETURN varchar2 PARALLEL_ENABLE AGGREGATE USING string_agg_type; </code></pre> <p>and use it like this:</p> <pre><code>select STRAGG(name) from t </code></pre> <p>I believe this approach was orginally proposed by Tom Kyte (at least, that's where I got it from - <a href="http://asktom.oracle.com/pls/asktom/f?p=100:11:0%3a%3a%3a%3aP11_QUESTION_ID:229614022562" rel="nofollow">Asktom: StringAgg</a></p>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. VO
      singulars
      1. This table or related slice is empty.
    2. VO
      singulars
      1. This table or related slice is empty.
    3. VO
      singulars
      1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload