谁能告诉我 &STARTS &STARTS2 和 &STARTS3 的结果值是多少
TL;DR:结果值将是未定义的,因为只有第一个 CHGVAR 命令可以编译。其他的问题很多。作为伪代码,这些语句是可以的,但是当它们表示为实际的 CL 语句时,它们会扩展成一大段代码。
细节:
一个潜在的问题是将 CL 视为一种“脚本语言”。虽然它当然可以并且通常用于“脚本”,但它是系统的“控制语言”。就“脚本”而言,对于一个体面的 C 程序员来说,用 C 替换 CL 就像“脚本”语言一样容易。同样,我见过 RPG 开发人员在 RPG 中完成大部分/大部分“脚本”。对于 COBOL 也是如此。
CL 也是系统的“命令语言”。在当前支持的操作系统版本中,您可以预期找到近 2000 个命令。许多系统功能只能通过命令来完成,或者通过调用或调用执行命令的程序来完成。通过将命令字符串传递给系统的命令处理 API 之一,每种本地语言都可以交互地执行大多数命令。即使是编译语言 CL,也可以像其他语言一样交互式地执行命令。
仍然编译了 CL。它也可以作为一种 ILE 语言完全参与,尤其是从操作系统的 V5R4 版本开始,但从技术上讲,自从 ILE 首次引入 AS/400 线以来。
作为 ILE 参与者,CL 可以完全访问其他母语具有的相同功能。例如,CL 可以使用 C 运行时函数库。因此,除了本机 CL 命令功能之外,它基本上可以做任何 ILE RPG 可以做的事情。您甚至可以编译 CL *MODULE 并将它们绑定在一起以创建服务程序(想想 Windows .DLL 或 UNIX 函数库)。
但是 CL 没有的一件事是 SQL 预处理器。
虽然有几个命令用于执行交互式 SQL 语句,但没有工具可以执行诸如 VALUES INTO 或从游标中提取或从 SQL 函数(如 DATE())获取结果之类的操作。
出色地。从技术上讲,我想我们可以说它可以做到,因为它毕竟是“ILE CL”。因此,CL 可以调用各种 SQL CLI API(想想 ODBC)。因此,您可以通过调用 SQLAllocEnv()、SQLAllocConnect()、SQLConnect()、SQLPrepare() 和所有其他可能需要的函数来编写 CL 过程。
但是您在 CL 中不能做的事情就像您想在最后三个 CHGVAR 命令的 VALUE() 参数中做的事情一样。您当然可以编写 CL 程序来执行日期计算和操作。像早期的其他人一样,我在 CL(以及其他语言)中编写了各种详细的日期数学函数,然后才能轻松访问各种日期/时间 API。然后,使用 API,大多数都被更优雅的 API 所取代。
CL 可以说是系统中最复杂的语言。但它不执行 SQL。至少不像C,RPG或COBOL可以。CL 旨在作为一种“控制”语言,而不是数据库或应用程序语言。
不过还有一个选择。有一种可以运行 SQL 的本机“脚本”语言——REXX。使用 REXX 比 CL 更容易做到这一点。您的 VALUE() 子句几乎可以被提升并直接粘贴到适当的 REXX 过程中。您可以使用 CL 包装器来为每个复杂的 VALUE() 参数调用该过程并从 REXX 中拉回结果。或者您可以让 REXX 同时完成这三个操作。
但是如果你想让 CL 完成这一切,还有很多编码工作要做。