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