如何解决将IF ELSE更改为CASE
| 我的存储过程中有以下块。它按预期工作。 但是我想将其更改为CASE,以便以后可以根据需要添加更多条件。IF parm_status=\'ALL\' THEN
IF op_type=\'CREDIT\' THEN
set v_wherestr =concat( v_wherestr,\" and (tran.operation=\'CREDIT\')\");
ELSEIF op_type=\'UNCREDIT\' THEN
set v_wherestr = concat( v_wherestr,\" and (tran.operation=\'CREDIT\' OR tran.operation=\'UNCREDIT\')\");
END IF;
...
...
END IF;
解决方法
基本上,它将是:
IF parm_status=\'ALL\' THEN
CASE op_type
WHEN \'CREDIT\' THEN set v_wherestr =concat( v_wherestr,\" and (tran.operation=\'CREDIT\')\");
WHEN \'UNCREDIT\' THEN set v_wherestr = concat( v_wherestr,\" and (tran.operation=\'CREDIT\' OR tran.operation=\'UNCREDIT\')\");
END;
...
...
END IF;
http://www.java2s.com/Code/SQL/Flow-Control/UseCASEWHENforstringvalue.htm
这将保留您的原始结构,但用CASE语句替换IF THEN语句。但是,我将查看您的实际查询,以查看是否存在完成您想要做的事情的最佳方法。即使这是一个存储过程,执行计划也很可能会一团糟。您可能需要处理通过UNION ALL或其他方式组合的多个查询,以使其更加优化。抱歉,在这里我无法为您提供进一步的帮助,但这实际上取决于您的总体查询和数据结构。
,请尝试以下操作:
IF parm_status=\'ALL\' THEN
set v_wherestr =
CASE op_type
WHEN \'CREDIT\' THEN concat( v_wherestr,\" and (tran.operation=\'CREDIT\')\");
WHEN \'UNCREDIT\' THEN concat( v_wherestr,\" and (tran.operation=\'CREDIT\' OR tran.operation=\'UNCREDIT\')\");
END;
... ...
END IF;
甚至(灵活性较差):
IF parm_status=\'ALL\' THEN
set v_wherestr = concat( v_wherestr,CASE op_type
WHEN \'CREDIT\' THEN \" and (tran.operation=\'CREDIT\')\"
WHEN \'UNCREDIT\' THEN \" and (tran.operation=\'CREDIT\' OR tran.operation=\'UNCREDIT\')\"
END;
);
... ...
END IF;
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。