Oracle 从另一个表中插入所有

Oracle 从另一个表中插入所有,oracle,plsql,oracle11g,oracle12c,Oracle,Plsql,Oracle11g,Oracle12c,我试图一次性执行下面的语句。就像我们使用INSERT ALL在一次执行中插入行一样。是否有任何方法可以在一次执行中执行以下两条语句(使用INSERT ALL) 当然,您可以使用收集Id 1和Id 2 和用于区分1234和1235: INSERT INTO TABLE_a ( COLUMN_1, COLUMN_2, COLUMN_3, COLUMN_4, COLUMN_5, COLUMN_6, COLUMN_7, COLUMN_8

我试图一次性执行下面的语句。就像我们使用INSERT ALL在一次执行中插入行一样。是否有任何方法可以在一次执行中执行以下两条语句(使用INSERT ALL)

当然,您可以使用收集Id 1和Id 2

和用于区分1234和1235:

INSERT
INTO TABLE_a
  (
    COLUMN_1,
    COLUMN_2,
    COLUMN_3,
    COLUMN_4,
    COLUMN_5,
    COLUMN_6,
    COLUMN_7,
    COLUMN_8
  )
SELECT decode(COLUMN_9,1,1234,2,1235),
    COLUMN_2,
    COLUMN_3,
    COLUMN_4,
    COLUMN_5,
    COLUMN_6,
    COLUMN_7,
    COLUMN_8
FROM TABLE_B
WHERE COLUMN_9 in (1,2);

为什么不使用或调整?如果对你有用,试试这个

INSERT
INTO TABLE_a
  (
    COLUMN_1,
    COLUMN_2,
    COLUMN_3,
    COLUMN_4,
    COLUMN_5,
    COLUMN_6,
    COLUMN_7,
    COLUMN_8
  )
SELECT CASE WHEN COLUMN_9 = 1 THEN 1234 WHEN COLUMN_9 = 2 THEN 1235 END,
    COLUMN_2,
    COLUMN_3,
    COLUMN_4,
    COLUMN_5,
    COLUMN_6,
    COLUMN_7,
    COLUMN_8
FROM TABLE_B
WHERE COLUMN_9=1 OR COLUMN_9=2;
使用@Chris建议的函数

INSERT
INTO TABLE_a
  (
    COLUMN_1,
    COLUMN_2,
    COLUMN_3,
    COLUMN_4,
    COLUMN_5,
    COLUMN_6,
    COLUMN_7,
    COLUMN_8
  )
SELECT DECODE(COLUMN_9,1,1234,2,1235)
    COLUMN_2,
    COLUMN_3,
    COLUMN_4,
    COLUMN_5,
    COLUMN_6,
    COLUMN_7,
    COLUMN_8
FROM TABLE_B
WHERE COLUMN_9=1 OR COLUMN_9=2;

您可以使用
插入到。。。使用联合查询选择

INSERT INTO TABLE_a (COLUMN_1, COLUMN_2, COLUMN_3, COLUMN_4, COLUMN_5, COLUMN_6,
    COLUMN_7, COLUMN_8)
SELECT
    1234, COLUMN_2, COLUMN_3, COLUMN_4, COLUMN_5, COLUMN_6, COLUMN_7, COLUMN_8
FROM TABLE_B
WHERE COLUMN_9 = 1
UNION ALL
SELECT
    1235, COLUMN_2, COLUMN_3, COLUMN_4, COLUMN_5, COLUMN_6, COLUMN_7, COLUMN_8
FROM TABLE_B
WHERE COLUMN_9 = 2

与原始方法相比,此方法有一个明显的优势。有了这个答案,整个insert将在一条语句中进行。

这与insert ALL有什么关系?(提示:什么都没有!)您可以在一个INSERT语句中轻松地完成这项工作:只保留第一条语句,但将WHERE子句更改为(1,2)My bad,My example is erre中的
WHERE COLUMN_9。我更新了问题。我的错,我的例子错了。我已经更新了这个问题。如果有5个select语句,在select语句之间使用union是否仍然可以?是的,您可以根据需要将任意多个语句联合在一起。Oracle可能会施加限制,但这可能不会发生在5点,假设这5个选择中的每一个都不是大量的或需要很长的时间。与解码或可能的情况下的解决方案相比,此解决方案还有一个明显的缺点,即它会读取两次
表B
(或者五次,如果OP需要对列9中的五个不同值执行此操作)。我的错,我的示例是错误的。我已更新了问题。@Hareesh.check编辑的答案。。您可以使用CASE-WHEN语句根据表_B第_9列中的值在表_A第_1列中插入所需值,即对于1或2,则分别插入1234和1235。此外,只需要一条SELECT语句,唯一id插入由CASE s处理声明您也可以使用oracle中的DECODE函数:DECODE(列名称、值1、ret值1、值2、retvalue2、默认值)。DECODE最多可以处理255(?)个值。可用于整数、字符和everything@Chriz谢谢分享..我喜欢SQL Server..不知道解码()函数..很高兴现在就学到新的东西。根据列9的不同值,列1缺少不同的值
INSERT INTO TABLE_a (COLUMN_1, COLUMN_2, COLUMN_3, COLUMN_4, COLUMN_5, COLUMN_6,
    COLUMN_7, COLUMN_8)
SELECT
    1234, COLUMN_2, COLUMN_3, COLUMN_4, COLUMN_5, COLUMN_6, COLUMN_7, COLUMN_8
FROM TABLE_B
WHERE COLUMN_9 = 1
UNION ALL
SELECT
    1235, COLUMN_2, COLUMN_3, COLUMN_4, COLUMN_5, COLUMN_6, COLUMN_7, COLUMN_8
FROM TABLE_B
WHERE COLUMN_9 = 2