如果在插入语句plsql中使用else

时间:2019-07-15 06:53:23

标签: sql oracle plsql

我有plsql代码,可将数据从table1插入到table2

并且我想在语句中插入某些值,这是我的代码

for rec_table1 in (
select * from table1 
where salary > 100)
loop
insert into table2 (
col1 , col2 , col3 col4 ,col5)
values 
(rec_table1.col1 , 
 rec_table1.col2,
 rec_table1.col3 , 
 rec_table1.col4 ,
if (rec_table1.col2 = 1)
  then
rec_table1.col2 
else
rec_table1.col5
end if  

但是它在if语句时给了我语法错误

4 个答案:

答案 0 :(得分:1)

将普通插入插入到外壳中就可以了。无需进行循环。

  INSERT INTO table2 (
     col1,col2,col3,col4,col5) 
        select col1 , col2,col3 col4,CASE col2
     WHEN 1 THEN col2
          ELSE col5
     END AS col5
     FROM table1 where salary > 100;

答案 1 :(得分:1)

IF是PL / SQL语句,不能在SQL语句内使用。

可以使用SQL CASE表达式:

for rec_table1 in (select * from table1 
                   where salary > 100)
loop
  insert into table2 (col1, col2, col3, col4, col5)
  values (rec_table1.col1, rec_table1.col2,  rec_table1.col3, rec_table1.col4,
          case 
            when rec_table1.col2 = 1 then rec_table1.col2 
            else rec_table1.col5
          end);
END LOOP;

但是,整个循环效率低下且缓慢。不用了可以将其编写为单个INSERT语句,它将执行得更好。

您可以替换完整的LOOP .. END LOOP;部分带有以下INSERT语句:

insert into table2 (col1, col2, col3, col4, col5)
select col1, col2, col3, col4,           
       case 
          when col2 = 1 then col2 
          else col5
       end
from table1 
where salary > 100;

答案 2 :(得分:1)

您可以在invalid value 'gnu++1y' in '-std=gnu++1y' 中使用以下语句来对其进行管理:

decode()
通过将insert into table2 (col1 , col2 , col3 col4 ,col5) select col1 , decode(col2,1,col2,col5) , col3, col4 ,col5 from table1 where salary > 100; 表达式用作

OR

case..when

P.S。 insert into table2 (col1 , col2 , col3 col4 ,col5) select col1 , case when col2=1 then col2 else col5 end , col3, col4 ,col5 from table1 where salary > 100; decode()的特有词,Oracle DB是通用的。

答案 3 :(得分:0)

我相信,而不是 If-Else ,但您必须实现 Case-When 语法。

以下是文档:Case-When

首先要专注于构造正确的Select语句,然后可以使用select查询的输出插入值。