REGEXP_SUBSTR
/* Formatted on 2015/03/23 18:14 (Formatter Plus v4.8.8) */
CREATE OR REPLACE TYPE t_string_agg AS OBJECT (
g_string VARCHAR2 (32767),
STATIC FUNCTION odciaggregateinitialize (sctx IN OUT t_string_agg)
RETURN NUMBER,
MEMBER FUNCTION odciaggregateiterate (
SELF IN OUT t_string_agg,
VALUE IN VARCHAR2
)
RETURN NUMBER,
MEMBER FUNCTION odciaggregateterminate (
SELF IN t_string_agg,
returnvalue OUT VARCHAR2,
flags IN NUMBER
)
RETURN NUMBER,
MEMBER FUNCTION odciaggregatemerge (
SELF IN OUT t_string_agg,
ctx2 IN t_string_agg
)
RETURN NUMBER
);
/
CREATE OR REPLACE TYPE BODY t_string_agg
IS
STATIC FUNCTION odciaggregateinitialize (sctx IN OUT t_string_agg)
RETURN NUMBER
IS
BEGIN
sctx := t_string_agg (NULL);
RETURN odciconst.success;
END;
MEMBER FUNCTION odciaggregateiterate (
SELF IN OUT t_string_agg,
VALUE IN VARCHAR2
)
RETURN NUMBER
IS
BEGIN
SELF.g_string := SELF.g_string || ',' || VALUE;
RETURN odciconst.success;
END;
MEMBER FUNCTION odciaggregateterminate (
SELF IN t_string_agg,
returnvalue OUT VARCHAR2,
flags IN NUMBER
)
RETURN NUMBER
IS
BEGIN
returnvalue := RTRIM (LTRIM (SELF.g_string, ','), ',');
RETURN odciconst.success;
END;
MEMBER FUNCTION odciaggregatemerge (
SELF IN OUT t_string_agg,
ctx2 IN t_string_agg
)
RETURN NUMBER
IS
BEGIN
SELF.g_string := SELF.g_string || ',' || ctx2.g_string;
RETURN odciconst.success;
END;
END;
/
CREATE OR REPLACE FUNCTION string_agg (p_input VARCHAR2)
RETURN VARCHAR2
PARALLEL_ENABLE AGGREGATE USING t_string_agg;
select string_agg(segment1) from po_distributions_v where PO_HEADER_ID =266266
/* Formatted on 2015/03/23 18:14 (Formatter Plus v4.8.8) */
CREATE OR REPLACE TYPE t_string_agg AS OBJECT (
g_string VARCHAR2 (32767),
STATIC FUNCTION odciaggregateinitialize (sctx IN OUT t_string_agg)
RETURN NUMBER,
MEMBER FUNCTION odciaggregateiterate (
SELF IN OUT t_string_agg,
VALUE IN VARCHAR2
)
RETURN NUMBER,
MEMBER FUNCTION odciaggregateterminate (
SELF IN t_string_agg,
returnvalue OUT VARCHAR2,
flags IN NUMBER
)
RETURN NUMBER,
MEMBER FUNCTION odciaggregatemerge (
SELF IN OUT t_string_agg,
ctx2 IN t_string_agg
)
RETURN NUMBER
);
/
CREATE OR REPLACE TYPE BODY t_string_agg
IS
STATIC FUNCTION odciaggregateinitialize (sctx IN OUT t_string_agg)
RETURN NUMBER
IS
BEGIN
sctx := t_string_agg (NULL);
RETURN odciconst.success;
END;
MEMBER FUNCTION odciaggregateiterate (
SELF IN OUT t_string_agg,
VALUE IN VARCHAR2
)
RETURN NUMBER
IS
BEGIN
SELF.g_string := SELF.g_string || ',' || VALUE;
RETURN odciconst.success;
END;
MEMBER FUNCTION odciaggregateterminate (
SELF IN t_string_agg,
returnvalue OUT VARCHAR2,
flags IN NUMBER
)
RETURN NUMBER
IS
BEGIN
returnvalue := RTRIM (LTRIM (SELF.g_string, ','), ',');
RETURN odciconst.success;
END;
MEMBER FUNCTION odciaggregatemerge (
SELF IN OUT t_string_agg,
ctx2 IN t_string_agg
)
RETURN NUMBER
IS
BEGIN
SELF.g_string := SELF.g_string || ',' || ctx2.g_string;
RETURN odciconst.success;
END;
END;
/
CREATE OR REPLACE FUNCTION string_agg (p_input VARCHAR2)
RETURN VARCHAR2
PARALLEL_ENABLE AGGREGATE USING t_string_agg;
select string_agg(segment1) from po_distributions_v where PO_HEADER_ID =266266