Plsql 我可以在UPDATE语句中使用DECODE吗?

Plsql 我可以在UPDATE语句中使用DECODE吗?,plsql,Plsql,我可以在集合左侧的UPDATE语句中使用DECODE吗 更新临时设置解码(更新变量,1,col1, 2,col2)=更新_值 这给了我一个错误,因为eual符号被忽略了。不,你不能这样做。您可以在PL/SQL中执行此操作: IF update_var = 1 THEN UPDATE temp SET col1 = update_value; else UPDATE temp SET col2 = update_value; END IF; 或者您可以像这样使用动态SQL: l_

我可以在集合左侧的UPDATE语句中使用DECODE吗

更新临时设置解码(更新变量,1,col1, 2,col2)=更新_值


这给了我一个错误,因为eual符号被忽略了。

不,你不能这样做。您可以在PL/SQL中执行此操作:

IF update_var = 1 THEN
    UPDATE temp SET col1 = update_value;
else
    UPDATE temp SET col2 = update_value;
END IF;
或者您可以像这样使用动态SQL:

l_sql := 'UPDATE temp SET col'||update_var||' = :v';
EXECUTE IMMEDIATE l_sql USING update_value;

不能在update语句中使用decode。 但是,您可以使用merge语句

基本上,您使用合并的select部分将col1和col2解码为update_值或已经存在的值


这对于您的需求来说可能过于冗长,使用if语句或executeimmediate的解决方案可能更适合您的问题

这个怎么样?如果update标志设置为1,则更新col1;如果设置为2,则更新col2

UPDATE temp
   SET col1 = DECODE(update_var, 1, update_value, col1),
       col2 = DECODE(update_var, 2, update_value, col2)
另外,作为奖励,它将处理更新变量设置为一个或两个以外的值的可能情况

UPDATE temp
   SET col1 = DECODE(update_var, 1, update_value, col1),
       col2 = DECODE(update_var, 2, update_value, col2)