Oracle 将多个值从源表插入到目标表

Oracle 将多个值从源表插入到目标表,oracle,oracle-sqldeveloper,Oracle,Oracle Sqldeveloper,下面的代码将从src表中获取所有值,并插入IC_MST_VELOCITY表中。如果下面的代码错误,我需要知道如何将所有记录从src表移到IC_MST_VELOCITY表 (SELECT ARTICLE, CONCATKEY, CAST (LASTMODIFIEDDATE AS TIMESTAMP) AS LASTMOD, PRODSUBGRP, FR

下面的代码将从src表中获取所有值,并插入IC_MST_VELOCITY表中。如果下面的代码错误,我需要知道如何将所有记录从src表移到IC_MST_VELOCITY表

       (SELECT  ARTICLE,
                CONCATKEY,
                CAST (LASTMODIFIEDDATE AS TIMESTAMP)   AS LASTMOD,
                PRODSUBGRP,
                FROM IC_VELOCITY_V 
                ) src

    INSERT INTO IC_MST_VELOCITY(
                                ARTICLE,
                                CONCATKEY,
                                ISDELETED,
                                LASTMODIFIEDDATE,
                                MSTID,
                                PRODSUBGRP,
                                SKUID,
                                VELOCITY,
                                WHSE) 
                    VALUES(
                    select ARTICLE    from src,
                    select CONCATKEY  from src,
                    select LASTMOD    from src,
                    select PRODSUBGRP from src,
                 )

                    );

不,你的代码不会做任何事情,因为它是无效的

像这样的事情可能会发生;注意所有
NULL
值都被插入到没有源值的列中(从
ic\u velocity\u v
表中选择):


或者,较短的版本,没有没有任何值的列:

insert into ic_mst_velocity
  ( article,
    concatkey,
    lastmodifieddate,
    prodsubgrp
  ) 
  (select article,
          concatkey,
          cast(lastmodifieddate as timestamp) as lastmod,
          prodsubgrp
   from ic_velocity_v
  );

这些都管用吗?我不知道;这取决于

  • 如果有
    notnull
    列,但您没有在其中放入任何内容,那么它将失败
  • 如果有一个数据库触发器处理这个问题,它不会失败
  • 如果强制执行唯一性并违反它,它将失败
    • 那么,也许您需要
      where
      子句
  • 等等

正如我所说:这要看情况。

为什么需要存储过程?您可以使用
插入到。。。选择…
statement()作为单个操作;如果这是一个要求,我想你仍然可以用PL/SQL来包装它,但这不是必需的。你能回顾一下你的问题吗,我认为你在提问时遗漏了一些重要的信息?我觉得如果你有大量的记录要插入数据,你可以参考批量收集的例子。也可以使用
插入到一个select*from B,其中1=1
insert into ic_mst_velocity
  ( article,
    concatkey,
    lastmodifieddate,
    prodsubgrp
  ) 
  (select article,
          concatkey,
          cast(lastmodifieddate as timestamp) as lastmod,
          prodsubgrp
   from ic_velocity_v
  );