oracle将多个结果集用逗号拼接成字符串

有两个函数wmsys.wm_concat和listagg

1,SELECT wmsys.wm_concat(CATALOG_NAME) FROM "DATASHARE"."RES_CATALOG_CLASSIFY" WHERE PARENT_ID = '2';

2,

SELECT LISTAGG(CATALOG_NAME,',') WITHIN GROUP(ORDER BY CATALOG_NAME) FROM RES_CATALOG_CLASSIFY
        WHERE PARENT_ID = '2'
        group by PARENT_ID

其中,oracle 11g中两种方法都可以用

Oracle数据库中,你可以使用内置的SQL函数以及PL/SQL块来实现这个需求。首先,你需要将字符串通过`SUBSTR`、`INSTR`和`DECODE`等函数分割数组,然后利用`DISTINCT`关键字去除重复项,最后再使用`LISTAGG`函数重新组合字符串。以下是基本步骤: 1. 创建一个临时表或者变量来存储处理后的结果,因为Oracle不直接支持数组操作。 ```sql DECLARE v_input_string VARCHAR2(4000); v_split_values RAW(4000); -- 使用RAW类型可以避免长度限制 v_unique_values RAW(4000); BEGIN -- 假设v_input_string是你需要处理的字段值 v_input_string := 'your_string_with_comma_separated_values'; -- 分割字符串 FOR i IN 1..LENGTH(v_input_string) - LENGTH(REPLACE(v_input_string, ',', '')) + 1 LOOP IF v_input_string INSTR(i, ',') > 0 THEN v_split_values.extend; v_split_values(v_split_values.COUNT) := SUBSTR(v_input_string, i, INSTR(i, ',') - i); END IF; END LOOP; -- 去除重复并重新组合 SELECT DISTINCT SYS_REFCURSOR INTO :v_unique_values FROM TABLE(SYS.DBMS_DEBUG_VC2WRAP(v_split_values)); v_unique_values := DBMS_DEBUG_VC2VAR(v_unique_values); -- 更新字段 UPDATE your_table SET your_column = LISTAGG(your_column_value, ',') WITHIN GROUP (ORDER BY your_column_value) OVER (PARTITION BY ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) WHERE ROWNUM = 1; -- 或者根据实际情况调整条件 END; / ``` 记得替换`your_string_with_comma_separated_values`、`your_table`, `your_column`, 和 `your_column_value`为实际的列名和表名。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值