Ibm midrange IBMi(iSeries)视图点脚本
我试图将当前存储在ViewPoint中的内容作为脚本运行,并将其转换为SQL和计划任务。我的问题很简单,我不知道I系列使用的脚本语言。 谁能告诉我最终的价值是什么 &启动和启动2和启动3Ibm midrange IBMi(iSeries)视图点脚本,ibm-midrange,iseries-navigator,Ibm Midrange,Iseries Navigator,我试图将当前存储在ViewPoint中的内容作为脚本运行,并将其转换为SQL和计划任务。我的问题很简单,我不知道I系列使用的脚本语言。 谁能告诉我最终的价值是什么 &启动和启动2和启动3 CHGVAR VAR(&OFFSET) VALUE(0) CHGVAR VAR(&STARTS) VALUE(CYYMMDD(DATE(MONTH(Current Date- (&OFFSET + 1) Month)||'/22/'||YEAR(Current Date-(&OF
CHGVAR VAR(&OFFSET) VALUE(0)
CHGVAR VAR(&STARTS) VALUE(CYYMMDD(DATE(MONTH(Current Date- (&OFFSET + 1) Month)||'/22/'||YEAR(Current Date-(&OFFSET+1) month))))
CHGVAR VAR(&STARTS2) VALUE(CYYMMDD(DATE(MONTH(Current Date- (&OFFSET + 2) Month)||'/22/'||YEAR(Current Date-(&OFFSET+2) month))))
CHGVAR VAR(&STARTS3) VALUE(CYYMMDD(DATE(MONTH(Current Date- (&OFFSET + 3) Month)||'/22/'||YEAR(Current Date-(&OFFSET+3) month))))
iSeries的一个相对漂亮的地方是它可以让你做“自然语言”日期数学:
当前日期-2个月
正是它听起来的样子,一个正好比今天早两个月的日期
因此,假设它实际按照编写的方式工作,该脚本所做的是:
- 将变量
和偏移量
设置为0。(
命令是iSeries指定值的详细方式:在大多数语言中,您可以编写CHGVAR
,即使使用iSeries,您也可以将其缩短为&OFFSET=0
)CHGVAR&OFFSET 0
- 将变量
设置为上月22日,其中日期为CYYMMDD格式。(它通过基于“使用比今天早一个月的月份,22作为日期,以及比今天早一个月的月份的年份”来构造日期,然后将其转换为CYYMMDD格式&start
- 将变量
设置为2个月前的第22个月&STARTS2
- 将变量
设置为3个月前的第22个&STARTS3
和OFFSET
的值(通过更改其值(0)
赋值),您的计算日期在过去会远得多:将其设置为值(4)
将得到5、6和7个月前的日期
顺便说一下,在CYYMMDD格式中,“C”是1900年以来的世纪计数器;本质上,日期是YYYYMMDD-19000000形式的整数。
因此,1999年1月1日=19990101为YYYYMMDD格式,或0990101为CYYMMDD格式;2011年12月31日=20111231为YYYYMMDD格式,或1111231为CYYMMDD格式
因此,如果您今天(2015年8月19日)运行此程序,您将获得以下结果:
- &开始=1150722
- &STARTS2=1150622
- &STARTS3=1150522
顺便说一下,您编写脚本时使用的语言称为“CL”(是“命令语言”的缩写),官方语言参考是。iSeries的一个相对漂亮的地方是,它可以让你做“自然语言”日期数学:
当前日期-2个月
正是它听起来的样子,一个正好比今天早两个月的日期
因此,假设它实际按照编写的方式工作,该脚本所做的是:
- 将变量
设置为0。(&OFFSET
命令是iSeries指定值的详细方式:在大多数语言中,您可以编写CHGVAR
,即使使用iSeries,您也可以将其缩短为&OFFSET=0
)CHGVAR&OFFSET 0
- 将变量
设置为上个月的22号,其中日期为CYYMMDD格式。(它通过基于“使用今天之前一个月的月份,22号作为日期,以及今天之前一个月的月份的年份”构造日期,然后将其转换为CYYMMDD格式来实现此目的&start
- 将变量
设置为2个月前的第22个月&STARTS2
- 将变量
设置为3个月前的第22个&STARTS3
和OFFSET
的值(通过更改其值(0)
赋值),您的计算日期在过去会远得多:将其设置为值(4)
将得到5、6和7个月前的日期
顺便说一下,在CYYMMDD格式中,“C”是1900年以来的世纪计数器;本质上,日期是YYYYMMDD-19000000形式的整数。
因此,1999年1月1日=19990101为YYYYMMDD格式,或0990101为CYYMMDD格式;2011年12月31日=20111231为YYYYMMDD格式,或1111231为CYYMMDD格式
因此,如果您今天(2015年8月19日)运行此程序,您将获得以下结果:
- &开始=1150722
- &STARTS2=1150622
- &STARTS3=1150522
CHGVAR VAR(&OFFSET) VALUE(0)
CHGVAR VAR(&STARTS) VALUE(CYYMMDD(DATE(MONTH(Current Date- (&OFFSET + 1) Month)||'/22/'||YEAR(Current Date-(&OFFSET+1) month))))
CHGVAR VAR(&STARTS2) VALUE(CYYMMDD(DATE(MONTH(Current Date- (&OFFSET + 2) Month)||'/22/'||YEAR(Current Date-(&OFFSET+2) month))))
CHGVAR VAR(&STARTS3) VALUE(CYYMMDD(DATE(MONTH(Current Date- (&OFFSET + 3) Month)||'/22/'||YEAR(Current Date-(&OFFSET+3) month))))
TL;DR:结果值将是未定义的,因为只有第一个CHGVAR命令可能会编译。其他命令有很多问题。作为伪代码,这些语句是可以的,但当它们表示为实际的CL语句时,它们将扩展为大量代码
详细信息:
一个潜在的问题是将CL视为一种“脚本语言”。虽然它当然可以而且通常用于“脚本”,但它是系统的“控制语言”。就“脚本”而言,一个体面的C程序员用C代替CL和“脚本”一样容易类似地,我见过RPG开发人员在RPG中完成了大部分的“脚本编写”。COBOL也是如此
CL也是系统的“命令语言”。在当前受支持的操作系统版本中,您可能会发现近2000个命令。许多系统功能只能通过命令,或通过调用或调用执行命令的程序来完成。通过将命令字符串传递给系统的命令处理API之一,每种本机语言都可以交互执行大多数命令。Even CL是一种编译语言,可以像其他语言一样交互执行命令
尽管如此,CL还是经过编译的。它也可以作为一种ILE语言完全参与进来,尤其是从V5R4版本的操作系统开始,但从技术上讲,ILE是在as/400系列中首次引入的
作为ILE的参与者,CL可以完全访问其他母语具有的相同功能。例如,CL可以使用funct的C运行时库