当要重复执行一个或多个语句时,您可以使用循环语句。 您可以使用的五种不同类型的循环性语句为:
- for-to-do
- for-downto-do
- foreach-in-do
- while-do
- repeat-until
使用最多的循环语句之一是 for 语句。 如果使用 for 帐单,您应该事先知道将会对语句实现重复多少次。
在下一个示例中,for 语句用来循环五次。 变量 intCount 将会计算循环次数。
在以下示例中,使用数字(如 5)来设定循环次数。 您还可以使用其他整数变量,而不是固定值。 无论哪一种情况,for 语句都事先知道需要循环多少次。
for 语句只能运行一个语句。 如果要运行多个语句,需要使用包含 begin 和 end 的复合语句。
使用 for 语句时是向上计数,也就是说 for 语句会逐渐增加变量的值。 您也可以使用 for downto 语句递减,向下计数。
与只能运行一个语句的 for 语句类似,for downto 语句也仅运行一个语句。 下一个示例展示了复合语句的使用。
Foreach 语句只能用于可枚举集合(列表和字典),不能用于数组。
使用 foreach 语句时,变量将获取集合中特定项的值。 每个循环都会被分配下一个值。
在您开始循环之前,while 语句首先会检查条件是否为真。 如果本条件保持为真,则会持续运行 while 语句块内的语句。
因此,如果一开始条件就不是真,则可能根本不运行语句。
如果要运行多个语句,需要使用复合语句。
While 语句会在开始循环之前先检查是否存在有效的条件,而 repeat until 语句会先运行,然后再检查是否存在条件。 它将一直循环到条件有效为止,这意味着 repeat until 语句至少运行一次。 只要条件无效,循环就会继续运行。
Repeat until 语句是一个语句,您可以在语句块中放入自己的语句。 鉴于本特性,如果要运行多个语句,您无需使用复合语句。
当您想要对一组记录进行循环时,通常可以使用 repeat until 语句。 在下一个示例中,您将对 MyTable 表的所有行进行循环。
With 语句有时与循环语句组合使用,但也可以单独使用。 With 语句的目的是减少记录变量的使用。 下面的示例中说明了本结构,其中创建了一个 myTable 变量,并为表中的所有字段指定了值。
您可以使用 with 语句,而不是重复输入单词 myTable。
可扩展性模型和 AL 编程语言是 C/AL 语言的后继者。 到目前为止,with 语句在 AL 中一直受支持。
虽然使用 with 语句可能会使代码更难阅读,但也可以防止升级 Business Central 中的代码,而不更改代码,甚至更糟糕的是,升级代码,但同时改变行为。
我们区分两种不同类型的 with 语句:使用关键字的显式 with 语句类型,以及在代码中不直接表示的隐式 with 类型。 接下来几节将分别说明。
在 Business Central Online 中,您的代码会随着平台和应用程序版本升级而重新编译。 重新编译可确保其正常运行,并且重新编译会重新生成运行时工件以匹配新平台。 未经适当的警告,不允许做出中断性变更,但作为 Microsoft 来说,with 语句的使用使得无法以完全不中断的方式做出添加性变更。 本问题并非仅限于 Microsoft 所做的变更;任何添加性变更都有可能会中断消费代码中的 with 语句。
以下示例说明了使用 with 语句编写的代码;在本上下文中称为显式 with 语句:
DoStuff() 过程用于处理客户记录工作,并调用本地过程 IsDirty() 以检查是否更新记录。 从上面的代码发现,它似乎不执行任何操作,因为 IsDirty() 返回 false - 假设 IsDirty() 调用(行 11)实际上调用本地 IsDirty() 过程。
再次看一下上述代码示例,如果在两个版本之间的基础应用程序中添加 IsDirty,代码会怎样? 为了解这一点,我们需要看一下编译器如何将语法转换为符号。 当 AL 编译器遇到 IsDirty 调用时,它必须将语法名称绑定到过程符号。
当 AL 编译器在上述示例中搜索符号 IsDirty() 时,将会按照以下顺序进行搜索:
1- 客户表
- 客户表和客户表扩展上的用户定义的成员
- 平台定义的成员,例如 FindFirst() 或 Modify()
2- MyCodeunit codeunit
- 用户定义的成员,例如 IsDirty()
- 平台定义的成员
3- 全局定义的成员
搜索 IsDirty 操作第一次找到名称 IsDirty 后,不会继续到下一个顶层组。 这意味着,如果在客户表(平台或应用程序)中引入名为 IsDirty 的过程,则将找到该过程,而不是 MyCodeunit 中的过程。
对于显式 with,解决方法是停止使用它。 使用 with 语句可能会使您的代码容易受到上游更改的影响。 下面的示例说明了如何使用显式 with 语句重写示例。
在某些情况下,编译器会自动注入隐式 with。 接下来几节介绍这如何作用于 codeunit 和页面。
Codeunit
当 codeunit 设置了 TableNo 属性时,OnRun 触发器内的代码周围就会存在隐式 with。 在下面的代码示例中,使用注释指明了这一点。
与显式 with 语句类似,代码看起来会调用本地 IsDirty 方法,但具体取决于客户表、客户表的扩展,以及可能并非如此的内置方法。 如果其中任何一项实现具有相同签名的 IsDirty 方法,并返回 true,则上面的示例将会出错并失败。 如果实现了具有不同签名的 IsDirty 方法,则本代码将不会编译,并且无法升级。
页面
表上的页面具有相同类型的隐式 with,但位于整个对象周围。 在页面对象内的任何地方,都可以直接使用源表的字段和方法,无需任何前缀。
在页面上,源记录上的隐式 with 不仅跨越触发器和过程中的代码;而且还涵盖字段的源表达式。
中断还是不中断,都不是问题
在以下 GitHub 存储库中,您可以找到更多示例和代码:BCTech/samples/WithOrWithout/
如果要停止运行循环,您可以使用 break 语句。
到此这篇sql循环语句(sql循环语句怎么写)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!版权声明:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权、违法违规、事实不符,请将相关资料发送至xkadmin@xkablog.com进行投诉反馈,一经查实,立即处理!
转载请注明出处,原文链接:https://www.xkablog.com/sqlbc/14279.html