获得uuid(32位) : select sys_guid() from dual 会产生一个跟MAC地址、生成时间相关的一个32位16进制的随机数。
同一张表中复制树形结构:
--复制表数据
create table ETMT_SUBJECT_CP as select * from ETMT_SUBJECT;
-- 新增一个uuid字段
alter table ETMT_SUBJECT_CP add uuid VARCHAR2(50);
-- 为每条记录生成一个uuid
UPDATE ETMT_SUBJECT_CP t
SET t.uuid = sys_guid();
--获取复制的树的结构,新的id为uuid,新的parent_id为puuid
SELECT tt.id,tt.parent_id,tt.subject_name,tt.uuid,tt2.uuid puuid
FROM etmt_subject_cp tt LEFT JOIN etmt_subject_cp tt2 ON tt2.id = tt.parent_id;
--将上述结果集插入原来的表中
INSERT INTO etmt_subject
SELECT tt.uuid,tt2.uuid puuid,tt.subject_name,t.~~~
FROM etmt_subject_cp tt LEFT JOIN etmt_subject_cp tt2 ON tt2.id = tt.parent_id;
---删除临时过渡表
DROP ETMT_SUBJECT_CP;
Oracle中将查询出的多条记录的某个字段拼接成一个字符串的方法
11g里面用listagg:
select listagg(name,',') within (order by id) from table
10g里面用wm_concat:
select wm_concat(name) from table
wm_concat是undocument的
listagg是11g document的
oracle wm_concat(column)函数使我们经常会使用到的,下面就教您如何使用oracle wm_concat(column)函数实现字段合并,如果您对oracle wm_concat(column)函数使用方面感兴趣的话,不妨一看。
shopping:
-----------------------------------------
u_id goods num
------------------------------------------
1 苹果 2
2 梨子 5
1 西瓜 4
3 葡萄 1
3 香蕉 1
1 橘子 3
=======================
想要的结果为:
--------------------------------
u_id goods_sum
____________________
1 苹果,西瓜,橘子
2 梨子
3 葡萄,香蕉
---------------------------------
1.select u_id, wmsys.wm_concat(goods) goods_sum 2. 3.from shopping 4. 5.group by u_id
想要的结果2:
--------------------------------
u_id goods_sum
____________________
1 苹果(2斤),西瓜(4斤),橘子(3斤)
2 梨子(5斤)
3 葡萄(1斤),香蕉(1斤)
---------------------------------
使用oracle wm_concat(column)函数实现:
select u_id, wmsys.wm_concat(goods || '(' || num || '斤)' ) goods_sum
from shopping
group by u_id
mysql---group_concat