SQR 按位置而不是多个 IF LET ENDIF 替换

Posted

技术标签:

【中文标题】SQR 按位置而不是多个 IF LET ENDIF 替换【英文标题】:SQR replace by position rather than multiple IF LET ENDIF 【发布时间】:2021-01-10 03:10:42 【问题描述】:

在将代码从一个数据库翻译到另一个数据库时,我必须为每个代码使用一个 IF LET ENDIF。 如果 $CODE = 'A11' 让 $CODE = 'AAA' 万一 如果 $CODE = 'B11' 让 $CODE = 'BBB' 万一 如果 $CODE = 'C11' 让 $CODE = 'CCC' 万一。 . .ad 恶心

SQR 中有没有办法进行位置替换? 替换('A11','B11','C11')IN('AAA','BBB','CCC')

谢谢, 大卫

【问题讨论】:

如果您可以在保存旧代码和新代码组合的数据库中创建一个表,然后您可以使用加载查找来提取信息。 SQR 中的代码行数会少得多。 那将是我的第一选择,我们甚至在源数据库中有一些“翻译”表,但出于某种原因,他们不想走那条路。蒙哥唯一的棋子。 . .谢谢,大卫 【参考方案1】:

很遗憾,LET 语句的 REPLACE 和 TRANSLATE 子命令都只允许进行一次转换。

作为多个 if-then-else 的替代方案,您可以使用 Evaluate 语句:

Evaluate $Code
   When = 'A11'
      Let $Code = 'AAA'
   When = 'B11'
      Let $Code = 'BBB'
   When-Other
End-Evaluate

这将使代码更容易审查并且不那么冗长。

【讨论】:

感谢您回复我。当我需要这个时,通常需要 20-150 次替换,所以至少我可以节省 30% 的线路。谢谢,大卫 我看到了 EVALUATE 在我的程序中的使用位置,但它们在每个 WHEN LET 上都有一个“BREAK”。我需要那个吗?使用 BREAK 是否可以节省处理时间?谢谢,大卫 BREAK 是可选的 - 我很确定。尝试并在没有的情况下进行测试,如果它不能满足您的需求,请添加 BREAK

以上是关于SQR 按位置而不是多个 IF LET ENDIF 替换的主要内容,如果未能解决你的问题,请参考以下文章

oracle中if/else的3种写法

oracle中if/else功能的实现的3种写法

Django - 模板中多个 if 的更好方法

oracle if 后可以给多个条件不?

tlm源码分析——sqr_if_base类型

#if /#endif 预处理指令