Plsql 在pl sql中使用Decode()if not equal条件
我正在研究游标。 现在我有一个任务,比如如果column1=21,那么column2可以在('item1','item2','item3')中,但是如果column1不是21,那么column2只能是'item1'。列1和列2都是主键的一部分 所以我尝试了这个方法 我将在第2列中提供上述3个值中的任何值,然后在处理过程中,我将检查第1列是否为21,然后我可以使用上述3个值中的任何一个,如果第2列不是21,则我只能使用“item1” 但由于我在游标中使用这两列,它们是主键的一部分,所以我必须在游标中获取rowid以检查重复记录 但我不会得到rowid,因为我将在处理过程中更改column2的值 所以我想使用decode(),但我不知道如何在这种情况下使用它: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” 但由于我在游标中使用这两列,它们是主键的一部分,所以我必须在游标
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个值中的一个值,因为该值将来自一列,所以我只能使用该列。