SQL> desc c;
名称 是否为空? 类型
----------------------------------------- -------- ------------------------
C NOT NULL VARCHAR2(8)SQL> desc d;
名称 是否为空? 类型
----------------------------------------- -------- ------------------------
D VARCHAR2(8)SQL> select * from cd;C D
-------- --------
1 a
2 b
1 cSQL> insert all
2 into c(c)
3 values(c)
4 into d(d)
5 values(d)
6 select c,d from cd;
insert all
*
ERROR 位于第 1 行:
ORA-00001: 违反唯一约束条件 (TEST.XPK_C)
我想把cd表中的c字段插入c表,d表的d字段插入d表 cd表中的c字段记录相同则c,c表都不插入
1:我在table c上c 字段上建有主键
2:我不想用游标实现,还需要判断,实现速度太慢各位大哥大姐看看有什么样的办法实现
名称 是否为空? 类型
----------------------------------------- -------- ------------------------
C NOT NULL VARCHAR2(8)SQL> desc d;
名称 是否为空? 类型
----------------------------------------- -------- ------------------------
D VARCHAR2(8)SQL> select * from cd;C D
-------- --------
1 a
2 b
1 cSQL> insert all
2 into c(c)
3 values(c)
4 into d(d)
5 values(d)
6 select c,d from cd;
insert all
*
ERROR 位于第 1 行:
ORA-00001: 违反唯一约束条件 (TEST.XPK_C)
我想把cd表中的c字段插入c表,d表的d字段插入d表 cd表中的c字段记录相同则c,c表都不插入
1:我在table c上c 字段上建有主键
2:我不想用游标实现,还需要判断,实现速度太慢各位大哥大姐看看有什么样的办法实现
insert all
into c(c) values (c)
into d(d) values (d)
select c,d from cd;
完全没问题,不关系主键的事,执行了超过两次,或者有cd表的c列有重复值
WHEN rn = 1 THEN
INTO c (c) VALUES(c)
WHEN rn <>0 THEN
INTO d (num) VALUES(d)
SELECT c,d,row_number() over(PARTITION BY c ORDER BY 1) rn FROM cd如果d列也不重复,那就再加一个辅助列就可以了
我想得到的结果是
SQL> select * from c;C
--------
1
2
SQL> select * from d;C
--------
a
b
或者
SQL> select * from d;C
--------
c
b 也就是说cd表中的数据只插入两条,
select *
from (select t1,t2,t3,t4,
dense_rank()
over(partition by t2,t3
order by t1,t4) dr
from test
)
where dr<2