sql / plsql - 根据源表中的另一列,将源表中的行插入目标,并在目标中使用一列

时间:2018-01-29 11:56:38

标签: sql oracle plsql

我有一个要求,我必须从一个表(比如源)到另一个表(比如目标)插入行(几百行)。但是目标中有一列(比如“错误”列),其每行的值取决于源中的列(例如电子邮件)。 例如,如果source.email为null,则target.error ='no email'(硬编码),否则target.error =其他(硬编码)。要在目标表中填充的所有其他列都存在于源表中。插入行的有效方法是什么?

1 个答案:

答案 0 :(得分:0)

1. insert into target select col1,col2, decode(email,null,'no 
   email','others') col4, col5 from source;

2  insert into target select col1,col2, case when email is null then 'no 
   email' else 'others' end col4 , col5 
    from source.

1 Decode- Function的作用类似于if else -Clause

   decode(email,null,'no  email','others') 

可以写成

 if email is null then 'no  email' else 'others' end if

see hier

2. Case when子句与If else子句相似/相同

 insert into select 
当源和目标中的数据类型匹配时,

语句从源复制数据并将其插入目标。

 Insert into target(col1,col2) select col1, col2 from source 

可以写成

   Insert into targert select col,col2 from source 

当目标只包含两列