0

如果我们根据属性位置以不同的顺序放置属性,请告诉我 Oracle 插入语句是否有效。我无法在开发环境中进行测试,因此在直接推动 PROD 更改之前需要专家意见。请帮忙。

我有以下表格:

表A - col1,col2,col3,col4,col5

表 B - col1、col2、col4、col5

我需要从 tableB 中选择不同的值并通过向 tableA 添加序列号来插入到 tableA 中。

由于不同的序列号在插入语句中不能一起工作,我正在使用外部选择语句。

请让我知道以下 2 个选项中的哪一个有效???如果两者都不起作用,那么也请提供您的建议。

选项 1 - 在最后的外部 select 语句中添加 nextval 并将 col3 作为插入中的最后一个位置

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 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 );

提前致谢!!

4

1 回答 1

1

两者都会起作用。插入它们的顺序无关紧要,只要您指定列名 (in 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>

为什么没问题?deptno, job因为Scott 的EMP表中有 9 种不同的 [ ] 组合。

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>
于 2022-03-01T19:50:37.943 回答