【发布时间】:2016-01-28 16:56:54
【问题描述】:
我想用另一个表中的随机名称更新表中的名称。表用户中有真实的用户名。表 tmp_users 中有组成的名称。我想用 tmp_users 表中的随机名称更新用户表中的所有名称。这个想法是用假客户匿名化真实的生产数据。 tmp_users 表中的条目较少,因此我认为我无法关联 id。
我遇到的问题是所有用户都设置为相同的名称。
一些样本数据:
create table users
(
name varchar2(50)
);
create table tmp_users
(
name varchar2(50)
);
insert into users values ('Cora');
insert into users values ('Rayna');
insert into users values ('Heidi');
insert into users values ('Gilda');
insert into users values ('Dorothy');
insert into users values ('Elena');
insert into users values ('Providencia');
insert into users values ('Louetta');
insert into users values ('Portia');
insert into users values ('Rodrick');
insert into users values ('Rocco');
insert into users values ('Nelson');
insert into users values ('Derrick');
insert into users values ('Everett');
insert into users values ('Nisha');
insert into users values ('Amy');
insert into users values ('Hyun');
insert into users values ('Brendon');
insert into users values ('Gabriela');
insert into users values ('Melina');
insert into tmp_users values ('Snow White');
insert into tmp_users values ('Cinderella');
insert into tmp_users values ('Aurora');
insert into tmp_users values ('Ariel');
insert into tmp_users values ('Belle');
insert into tmp_users values ('Jasmine');
insert into tmp_users values ('Pocahontas');
insert into tmp_users values ('Mulan');
insert into tmp_users values ('Tinker Bell');
insert into tmp_users values ('Anna');
insert into tmp_users values ('Elsa');
--Wrong, sets all users to the same random name
update users set name = (select name from (select name from tmp_users order by sys_guid()) where rownum = 1);
--Wrong, sets all users to the same random name
update users set name = (select name from (select name from tmp_users order by dbms_random.value) where rownum = 1);
当这样做时:
select * from users;
我得到的结果是这样的,我不想要。
Cinderella
Cinderella
Cinderella
Cinderella
Cinderella
...
我想为用户表中的每一行分配一个随机名称。所有行的名称不同。我想要这样的东西:
Mulan
Cinderella
Belle
Elsa
Jasmine
Tinker Bell
...
知道如何做到这一点吗?我正在使用 Oracle Database 11g Express Edition 11.2.0.2.0。使用光标很容易做到,但我试图弄清楚如何通过设置操作来做到这一点。
更新:
我现在已经在两个不同的 Oracle 版本上进行了测试。相关子查询解决方案不适用于 Oracle Database 11g Express Edition 11.2.0.2.0。 但有时它确实适用于 Oracle Database 11g 企业版 11.2.0.4.0。在一张桌子上它一直有效,而在另一张桌子上它从不工作。
【问题讨论】: