Oracle插入不同位置的属性
Oracle inserting with different position of attributes
如果我们根据属性位置以不同的顺序放置属性,请告诉我Oracle insert 语句是否有效。我无法在开发环境中进行测试,因此在我直接推动 PROD 中的更改之前需要专家意见。请帮忙
我有以下表格:
tableA - col1, col2, col3, col4,col5
tableB - col1, col2, col4, col5
我需要从 tableB 中选择不同的值并通过向其添加序列号插入到 tableA 中。
因为 distinct 和 sequence numbers 在插入语句中不能一起工作,所以我使用外部 select 语句。
请告诉我以下 2 个选项中哪个可行???如果两者都不起作用,请也提供您的建议。
选项 1 - 在外部 select 语句的最后添加 nextval 并保持 col3 作为 insert
中的最后位置
insert into tableA ( col1, col2, col4, col5, col3 ) select col1, col2, col4, col5, my_seq.nextval as col3 from ( select distinct col1, col2, col4, col5 from tableB );
选项 2- 在外部 select 语句中以相同的顺序添加 nextval 并保持 col3 在 insert
中的相同位置
insert into tableA ( col1, col2, col3, col4, col5 ) select col1, col2, my_seq.nextval as col3, col4, col5 from ( select distinct col1, col2, col4, col5 from tableB );
在此先感谢!!
两者都可以。插入它们的顺序无关紧要,只要您指定列名(在 insert into
中)并在后面的 select
中匹配它们即可。
SQL> create sequence my_seq;
Sequence created.
SQL> create table tablea (deptno number, job varchar2(10), seq number);
Table created.
SQL> -- your first query
SQL> insert into tablea (deptno, job, seq)
2 select deptno, job, my_seq.nextval
3 from (select distinct deptno, job from emp);
9 rows created.
SQL> -- your second query
SQL> insert into tablea (seq, job, deptno)
2 select my_seq.nextval, job, deptno
3 from (select distinct deptno, job from emp);
9 rows created.
结果:
SQL> select * from tablea order by seq;
DEPTNO JOB SEQ
---------- ---------- ----------
20 CLERK 1
30 SALESMAN 2
20 MANAGER 3
30 CLERK 4
10 PRESIDENT 5
30 MANAGER 6
10 CLERK 7
10 MANAGER 8
20 ANALYST 9
20 CLERK 10
30 SALESMAN 11
20 MANAGER 12
30 CLERK 13
10 PRESIDENT 14
30 MANAGER 15
10 CLERK 16
10 MANAGER 17
20 ANALYST 18
18 rows selected.
SQL>
为什么可以?因为在 Scott 的 EMP
table.
中有 9 个不同的 [deptno, job
] 组合
SQL> select distinct deptno, job from emp;
DEPTNO JOB
---------- ---------
20 CLERK
30 SALESMAN
20 MANAGER
30 CLERK
10 PRESIDENT
30 MANAGER
10 CLERK
10 MANAGER
20 ANALYST
9 rows selected.
SQL>
如果我们根据属性位置以不同的顺序放置属性,请告诉我Oracle insert 语句是否有效。我无法在开发环境中进行测试,因此在我直接推动 PROD 中的更改之前需要专家意见。请帮忙
我有以下表格:
tableA - col1, col2, col3, col4,col5
tableB - col1, col2, col4, col5
我需要从 tableB 中选择不同的值并通过向其添加序列号插入到 tableA 中。
因为 distinct 和 sequence numbers 在插入语句中不能一起工作,所以我使用外部 select 语句。
请告诉我以下 2 个选项中哪个可行???如果两者都不起作用,请也提供您的建议。
选项 1 - 在外部 select 语句的最后添加 nextval 并保持 col3 作为 insert
中的最后位置insert into tableA ( col1, col2, col4, col5, col3 ) select col1, col2, col4, col5, my_seq.nextval as col3 from ( select distinct col1, col2, col4, col5 from tableB );
选项 2- 在外部 select 语句中以相同的顺序添加 nextval 并保持 col3 在 insert
中的相同位置insert into tableA ( col1, col2, col3, col4, col5 ) select col1, col2, my_seq.nextval as col3, col4, col5 from ( select distinct col1, col2, col4, col5 from tableB );
在此先感谢!!
两者都可以。插入它们的顺序无关紧要,只要您指定列名(在 insert into
中)并在后面的 select
中匹配它们即可。
SQL> create sequence my_seq;
Sequence created.
SQL> create table tablea (deptno number, job varchar2(10), seq number);
Table created.
SQL> -- your first query
SQL> insert into tablea (deptno, job, seq)
2 select deptno, job, my_seq.nextval
3 from (select distinct deptno, job from emp);
9 rows created.
SQL> -- your second query
SQL> insert into tablea (seq, job, deptno)
2 select my_seq.nextval, job, deptno
3 from (select distinct deptno, job from emp);
9 rows created.
结果:
SQL> select * from tablea order by seq;
DEPTNO JOB SEQ
---------- ---------- ----------
20 CLERK 1
30 SALESMAN 2
20 MANAGER 3
30 CLERK 4
10 PRESIDENT 5
30 MANAGER 6
10 CLERK 7
10 MANAGER 8
20 ANALYST 9
20 CLERK 10
30 SALESMAN 11
20 MANAGER 12
30 CLERK 13
10 PRESIDENT 14
30 MANAGER 15
10 CLERK 16
10 MANAGER 17
20 ANALYST 18
18 rows selected.
SQL>
为什么可以?因为在 Scott 的 EMP
table.
deptno, job
] 组合
SQL> select distinct deptno, job from emp;
DEPTNO JOB
---------- ---------
20 CLERK
30 SALESMAN
20 MANAGER
30 CLERK
10 PRESIDENT
30 MANAGER
10 CLERK
10 MANAGER
20 ANALYST
9 rows selected.
SQL>