在 SQLSCRIPT TEST 库中,内置库 SYS.SQLSCRIPT_TEST 的某些过程可用于在最终用户测试中验证结果。
目前,标量变量有多个匹配器,一个用于表变量的匹配器,另一个中止当前测试的执行。标量变量的匹配器为:
匹配器名称描述EXPECT_EQ检查输入是否相等EXPECT_NE检查输入是否不相等EXPECT_GE检查第一个输入是否大于或等于第二个输入。EXPECT_GT检查第一个输入是否大于第二个输入。EXPECT_LE检查第一个输入是否小于或等于第二个输入。EXPECT_LT检查第一个输入是否小于第二个输入。EXPECT_NULL检查输入是否为空
除 EXPECT_NULL 外,所有标量匹配器都只采用两个标量输入参数。这两个输入的数据类型在 SQLScript 中必须可比较。大多数数据类型可以分为三类:字符串类型、数字类型和日期类型。虽然同一类中的所有类型都相互比较,但无法比较日期和数字类型。字符串类型可以与所有其他数据类型进行比较,但在比较之前将转换为非字符串类型。只要比较两种不同的数据类型,就会至少转换其中一个输入。当转换失败时,会将其视为正常执行错误,而不是报告匹配程序失败。
表匹配器 (EXPECT_TABLE_EQ) 具有三个输入参数。除了应比较的两个表变量外,还有第三个可选输入 - IGNORE_ORDER。默认情况下,此参数为 TRUE,将在不考虑行顺序的情况下比较表变量。例如,第一个输入的第 2 行可能与第二个输入的第 5 行匹配。但是,每行最多与另一个表变量中的一行匹配。两个输入表变量必须具有相同数量的列,并且列必须具有相同的名称。列的数据类型也必须具有可比性。如果表列的类型不同,将在比较之前转换其中一个列。与标量比较不同,如果此类转换失败,则不会导致运行时错误。相反,始终会将该行视为不匹配。与标量匹配器的另一个区别是处理 NULL 值。对于标量匹配器,与 NULL 相比的任何内容都是 false(甚至 NULL)。表匹配器假定 NULL 等于 NULL。
如果匹配器失败,人工可读的输出将添加到内置过程 SYS.SQLSCRIPT_RUN_TESTS_ON_ORIGINAL_DATA 的详细信息输出表中。还会为此类匹配器生成调用堆栈,以便确定其确切的代码位置。为了便于阅读,表匹配器最多报告 100 行不匹配。
内置库 SQLSCRIPT_TEST 还包含名为 FAIL 的过程。此过程(类似于匹配器)将在 SYS.SQLSCRIPT_RUN_TESTS_ON_ORIGINAL_DATA 的详细信息输出表中添加一个条目,其中作为过程的输入参数提供的错误消息将作为消息包括在内。之后,此过程将中止当前测试的执行。后续测试仍将执行。