首页 > 解决方案 > 4 变量交换如果不为空

问题描述

陷入一种逻辑。我有 4 个变量,例如:var1、var2、var3、var4(它们的值也可以为空。但至少有一个不为空。)现在我想为它们的值分配非空值。

I meant that if Var1 is null then Var1 = var2 or var3 or var4 (which ever is not null).
if Var2 is null then Var2 should be var1 or var3 or var4 which ever is not null.

Case: if var1=null,var2=x,var3=null,var4=y
expected result is: var1=x or y,var2=x,var3=x or y,var4=y

我尝试使用 if 语句,但某处卡住了。我需要在 Oracle plsql 中执行此操作。但是任何语言的逻辑都会对我有所帮助。

我尝试了类似的东西(但这不会炒锅):-

If (Var1 is null) then
Var1 =var2;
if(Var2 is null) then
var1=var3;
var2=var3;
if(Var3 is null) then
var1=var4;
var2=var4;
var3=var4;

标签: oracleplsql

解决方案


如果每个值不为空,则以下解决方案保持每个值不变;否则它将用在该变量之后找到的第一个非空值替换它(如果在变量之后没有找到非空值,则循环回到前面)。更改对 COALESCE 的调用中的参数顺序将实现不同的规则,以选择分配给最初为 NULL 的变量的非空值;但是,变量本身必须始终是第一个参数,以便如果它以非 NULL 开头,则保留其值。

var1 := coalesce(var1, var2, var3, var4);
var2 := coalesce(var2, var3, var4, var1);
var3 := coalesce(var3, var4, var1, var2);
var4 := coalesce(var4, var1, var2, var3);

请注意,var1第二个赋值中的值与第一个赋值中已修改的值相同,但结果仍然相同:考虑到变量。


推荐阅读