Plsql 在pl sql中使用Decode()if not equal条件

Plsql 在pl sql中使用Decode()if not equal条件,plsql,Plsql,我正在研究游标。 现在我有一个任务,比如如果column1=21,那么column2可以在('item1','item2','item3')中,但是如果column1不是21,那么column2只能是'item1'。列1和列2都是主键的一部分 所以我尝试了这个方法 我将在第2列中提供上述3个值中的任何值,然后在处理过程中,我将检查第1列是否为21,然后我可以使用上述3个值中的任何一个,如果第2列不是21,则我只能使用“item1” 但由于我在游标中使用这两列,它们是主键的一部分,所以我必须在游标

我正在研究游标。 现在我有一个任务,比如如果column1=21,那么column2可以在('item1','item2','item3')中,但是如果column1不是21,那么column2只能是'item1'。列1和列2都是主键的一部分

所以我尝试了这个方法

我将在第2列中提供上述3个值中的任何值,然后在处理过程中,我将检查第1列是否为21,然后我可以使用上述3个值中的任何一个,如果第2列不是21,则我只能使用“item1”

但由于我在游标中使用这两列,它们是主键的一部分,所以我必须在游标中获取rowid以检查重复记录

但我不会得到rowid,因为我将在处理过程中更改column2的值

所以我想使用decode(),但我不知道如何在这种情况下使用它:

if column1 =21 then
   column2:={item1,item2,item3}//any from this 3 values
end if;

if column1 <> 21 then
   column2:='item1'
end if;
如果列1=21,则
第2列:={item1,item2,item3}//这3个值中的任意值
如果结束;
如果是第121列,那么
第2列:='item1'
如果结束;
请推荐我。

您可以:

column2 := DECODE(column1, 21, '{item1,item2,item3}', item1)
顺便说一下,“这3个值中的任意值”是不确定的,这就是为什么我输入字符串
{item1,item2,item3}


如果您知道需要这些值中的哪一个,则可以用该值替换字符串
{item1,item2,item3}

经过讨论,我使用的上述问题的解决方案是:

 declare
 column1 number :=21;
 column2 varchar2(50):='item2';\\This can be any value provided by user
 cursor c is 
    select DECODE(column1, 22, column2, 'item1') column2
      from dual;
 begin
   for rec in c
   loop
     dbms_output.put_line(rec.column2);
   end loop;
 end;

非常感谢你。。。我通过修改使用了您的方法。正如您所建议的,我使用了3个值中的一个值,因为该值将来自一列,所以我只能使用该列。