我有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语句时给了我语法错误
答案 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)