插入语句中同一列的两个case语句

时间:2018-07-24 10:56:01

标签: sql oracle plsql

在我的plsql过程中,我基于同一表的其他一些行的值插入行。对于insert语句中的一列,我需要根据case语句操作现有的行值,然后进行插入。我要做的是:

我为要使用的现有行创建一个光标,然后使用其列值。

 INSERT into table columns
 (column names..)
 values (
 curser.column names
 ,case 
     when input is null then null 
     else input||'.'|| 
 end 
 case 
     when curser.column like 'drop:%' then replace(curser.column,'drop:%') 
     else curser.column 
 end
 , other column values).

这里的输入是我过程的一个参数。

两个case语句都针对相同的列值。 (两个statemtents一起完成该列的值) 但是我在第二个“ case”语句中遇到了错误。 这不正确吗?

2 个答案:

答案 0 :(得分:2)

input||'.'|| end case

该节在语法上不正确。 end之后没有第二个字符串连接的第二个操作数,也没有逗号(或其他运算符)。

您大概想用

替换它
input||'.' end || case

以连接两个CASE的结果。

如果还有其他问题,例如目标列的数量与值的数量不匹配,则很难确定,因为遗漏了太多。

答案 1 :(得分:1)

这听起来不像是对光标的操作。我期望insert . . . select

insert into t columns (column names..)
    select . . .,
           (case when t.input is not null then input || '.' end),
           replace(t.column, 'drop:', ''),
           . . .
    from t
    where . . . ;