AS/400 CL控制语言基础(3)

来源:岁月联盟 编辑:zhu 时间:2008-02-21
AS/400 CL控制语言基础(3)内容简介:【AS400教程】◆第三章 程序间的通讯 程序间的通讯是指不同程序之间数据或参数的传递和交流。这种通讯可以出现在不同种类的程序中。如:RPG 与 C 语言,也可以出现在不同机器上,如:PC 与 AS/400。针对OS/400 而

  【AS400教程】◆第三章 程序间的通讯

  程序间的通讯是指不同程序之间数据或参数的传递和交流。这种通讯可以出现在不同种类的程序中。如:RPG 与 C 语言,也可以出现在不同机器上,如:PC 与 AS/400。针对OS/400 而言,通常程序间的通讯具有三种方式:

   * CALL、RETURN 命令
   * 数据队列通讯
   * 数据域通讯

  3.1 CALL 命令的使用

  调用程序: CALL PGM(PGMA) PARM(&A &B)
  被调用程序:PGM PARM(&C &D)

  有关 CALL 命令使用的几点说明:

   * 参数值可以是字符常量、数值常量、逻辑常量或 CL 常量,最多可达 40 个。
   * 参数值以 CALL 命令中出现的顺序传送,这必须与被调用程序的参数顺序相匹配,变量名不一定相同。
   * 被调程序中的接收参数必须说明,但接收值不受变量说明中初值的影响。
   * 接收参数值的改变会反映到调用程序中,但常量传送不会改变。
   * 字符常量通常以 32 个字节传送,数字常量以 15.5 长度压缩格式传送。

  3.2 数据队列的程序通讯

  数据队列(*DTAQ)是系统目标中的一种类型,当建立了这种目标后,一个程序可以发送数据给它,另一个程序再从中接收数据,从而达到程序之间的数据通讯。

  3.2.1 数据队列的优点

   * 数据队列是两个作业之间进行异步通讯的最快方法。相对数据库文件、消息队列或数据域而言,它需要较少的额外开销。
  
   * 多个作业可以向相同的数据队列送数据和取数据,而数据队列的先进先出、后进先出或要害字顺序排列属性,能够保证数据送取的正确性。
  
   * 在任何高级语言程序中,通过调用系统提供的程序,就可以对数据队列进行操作,而且操作方法灵活方便。数据队列的操作和使用包括两类:第一类使用 CL 命令;第二类调用系统程序。

  CL 命令:
   CRTDTAQ 建立数据队列
   DLTDTAQ 删除数据队列
   WRKDTAQ 工作数据队列
  系统程序:
   QSNDDTAQ 发送数据队列
   QRCVDTAQ 接收数据队列
   QCLRDTAQ 清除数据队列
   QMHQRDQD 检索数据队列

  3.2.2 数据队列的发送
  
  需要将数据发送给数据队列,只要在程序中调用QSNDDTAQ 。在 CL 程序中,调用的格式如下:

  CALL PGM(QSNDDTAQ) PARM(&QNAME &LIB &FLDLEN &FIELD
   &KEYLEN &KEY)

  &QNAME: 是长度为10的字符型,它命名了数据队列,如:IN_Q。
  &LIB: 是长度为10的字符型,它命名了数据队列所在的库,如:*LIBL。
  &FLDLEN: 是长度为5的数字型,它规定了发送给数据队列的字符数,如:100。
  &FIELD: 是长度为&FLDLEN的字符型,它包含了具体发送给数据队列的数据。
  &KEYLEN: 是长度为3的数字型,它说明了传送给数据队列的要害字长度,如:6。
  &KEY: 是长度为&KEYLEN的字符型,它包含了传送给数据队列的要害字数据。

  注:后两个参数可以自选,假如说明了一个,则必须说明另一个。

  3.2.3 数据队列的接收
  
  需要从数据队列中接收数据,只要在程序中调用QRCVDTAQ 。在 CL 程序中,调用的格式如下:
  
  CALL PGM(QRCVDTAQ) PARM(&QNAME &LIB &FLDLEN
   &FIELD &WAIT &ORDER KEYLEN &KEY &SNDRLEN &SNDR)

  &QNAME: 是长度为10的字符型,它命名了数据队列。如:OUT_Q。
  &LIB: 是长度为10的字符型,它命名了数据队列所在的库。如:*LIBL。
  &FLDLEN: 是长度为5的数字型,它规定了发送给数据队列的字符数。
  &FIELD: 是长度为&FLDLEN的字符型,它包含了从数据队列中接收到的具体数据。
  &WAIT: 是长度为5的数字型,它说明了等待接收数据的时间。负数表示无限制的等待;零表示不等待;正数示要等待的秒数,最大值是9999。这个参数只有在数据队列中无满足条件的数据时, 才起作用。
  &ORDER: 是长度为2的字符型,它说明了按要害字接收数据的条件。可用的字符值是:GT、LT、EQ、GE、LE。
  &KEYLEN: 是长度为3的数字型,它说明了接收数据队列的要害字长度。
  &KEY: 是长度为&KEYLEN的字符型,它标识了用于从数据队列中接收数据的要害字变量。
  &SNDRLEN:是长度为3的数字型,它规定了发送者标识的长度。
  &SNDR: 是长度为&SNDRLEN 的字符型,它包含了发送者标识的数据。

  注:后三个参数可以任选,但是&ORDER、&KEYLEN和&KEY 必须同时说明。

  3.2.4 数据队列的清除

  需要从数据队列中清除数据,只要在程序中调用 QCLRDTAQ在 CL 程序中,调用的格式如下:
  
  CALL PGM(QCLRDTAQ) PARMM(&QNAME &LIB)

  3.2.5 数据队列的检索
  
  需要检索一个数据队列的描述项,只要在程序中调用QMHQRDQD。在 CL 程序中,调用的格式如下:
  
  CALL PGM(QMHQRDQD) PARM(&RCVR &RCVRLEN
   &FORMAT &DQNAME)

  &RCVR: 是长度为&RCVRLEN的字符型,它标识了含有数据队列性的变量。
  &RCVRLEN: 是长度为4的数字型,它说明了&RCVR长度。
  &FORMAT: 是长度为8的字符型,它定义了接收模板的格式。
  &DQNAME: 是长度为20的字符型,它标识了数据队列和所在库,前十个字符是队列名字,后十个字符是库名。

  3.3 数据域的程序通讯
  
  数据域(*DTAARA)是系统目标中的一种类型。当建立了这种目标后,可以用来存入数据,以便任何程序进行读取和修改。数据域的典型用途如下:

   * 提供用于几个程序中的常数字段,易于共享和修改。如:标题、说明等。
   * 在一个作业中提供一个传递信息的区域。
   * 在一个作业中提供一个字段作为控制参数,以便轻易地得到修改。

  数据域的 CL 命令包括:

  CRTDTAARA 建立数据域,长度不超过2000
  CHGDTAARA 改变数据域,改变时数据域被锁定
  DSPDTAARA 显示数据域,可以以十六进制方式显示
  RTVDTAARA 检索数据域,检索值需要存入 CL 变量
  DLTDTAARA 删除数据域
  WRKDTAARA 工作数据域

图片内容