oracle - 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;
解决方案
如果每个值不为空,则以下解决方案保持每个值不变;否则它将用在该变量之后找到的第一个非空值替换它(如果在变量之后没有找到非空值,则循环回到前面)。更改对 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
第二个赋值中的值与第一个赋值中已修改的值相同,但结果仍然相同:考虑到变量。
推荐阅读
- here-api - Javascript API 的 HERE 地图:将地图边界设置为集群边界
- shell - 数据库从 Contao 2.11 迁移到 Magento 2.3 或 Shopware 6.1
- ruby-on-rails - 如何在 Rails 中同时使用渲染和重定向?
- postgresql - Postgres,为一个查询结果处理多个游标
- python - Pandas groupby and then pivot is not returning the desired output
- javascript - 深度反应useEffect / useEffect的使用?
- php - 第一次重新加载后的空会话变量
- python - Pyinstaller 创建 Pyside2 脚本的 exe 文件
- flutter - 如何在颤动中将主题存储在共享首选项中
- node.js - 如何使用 Node.js 快速会话处理唯一会话(一个用户会话)?