2024年3月23日发(作者:)

技术经验

AS400常用操作手册

1、 关于表的操作

1.1、 数据库表的拷贝

wrkobj: 输入要查找的目标、库,执行。(wrkobj obj(gjjtemp/czyb)

在目标窗口输入3,执行,修改要拷贝到的目标库,同时 Duplicate data 选YES,

执行。

然后使用grtobjaut进行赋权。Grtobjant 执行,输入 object、lib、object type(all)、

users(要赋权者)、authority(*all)。

Grtobjaut obj(gjgrdta/czfzb) objtype(*all) user(gjgr) aut(*all)

注意:如目标在要拷贝到的库中存在,则不能覆盖,必须先删除。

1.2、 如何在400上修改某条记录

UPDDTA: 输入逻辑文件名,则可以按照逻辑文件键字检索记录,然后修改。

如输入物理文件名,则检索出所有记录,不能定位到某条记录,只能一条一条翻阅到

要修改记录,然后修改,此时如果记录很多,太不方便。

1.3、 为表添加日志

第 1 页 共 43 页

技术经验

STRJRNPF FILE(GJDWDTA/LBJQCB)

JRN(GJDWDTA/GJJJRN) IMAGES(*BOTH)

1.4、 去掉表的日志(ENDJRNPF)

Journaled physical file . . . . > *ALL Name, *ALL

Library . . . . . . . . . . . Name, *LIBL, *CURLIB

+ for more values

Journal . . . . . . . . . . . . > GJJJRN Name, *FILE

Library . . . . . . . . . . . > GJGRDTA Name, *LIBL, *CURLIB

1.5、 清空表数据

CLRPFM

clrpfm GJDWDTA/ltqsjb

1.6、 如何在两台服务器之间传递数据

例如 将810机器上的gjgrdta库中sbgqcb中的数据传送到270机器上的gjdwdta

库中的sbgqcb中:

第 2 页 共 43 页

技术经验

在810机器上执行如下操作:

1)CHGDDMF-> F4:

DDM FILE 项填写:TESTDDM

LIBRARY填写:QGPL

Remote file:

File 处填写SBGQCB

Library填写GJDWDTA

执行

2)CPYF->F4:

From file 处填写SBGQCB

Library处填写GJGRDTA

To file 处填写TESTDDM

Library 处填写QGPL

第 3 页 共 43 页

技术经验

Replace or add records 处填写*ADD

执行。(执行成功后,屏幕下方显示记录条数)

1.7、 修改物理文件属性

CHGPF:

MEMBER SIZE项控制PF文件的记录条数:输入*NOMAX,则没有条数限制。

REUSE DELETED RECORDS选项控制表空间是否可以重复利用:选YES则,在记录

删除后其空间可以再利用,否则改空间不能重复利用,只有再RGZPFM后,才能重新利用

该空间。

1.8、 修改物理文件字符集为1388

CHGPF:F10,再F9, Coded character set ID 改为1388

1.9、 优化表RGZPFM

释放delete语句删除的数据所占用的数据库空间。

1.10、 DSPDBR

显示数据库文件(即表)的相关信息,如其物理文件,物理文件上挂有的所有的逻辑

文件等。

第 4 页 共 43 页

技术经验

DSPDBR,执行,输入如下信息:

File . . . . . . . . . . . . . . > DWXXB

Library . . . . . . . . . . . > GJDWDTA

Output . . . . . . . . . . . . . *

执行。

1.11、 DSPFD

显示数据库文件(即表,包括PF和LF)的JOURNAL、KEY FIELD。

也可查看逻辑文件挂到了哪个物理文件上

File . . . . . . . . . . . . . . > DWXXB

Library . . . . . . . . . . . > GJDWDTA

Type of information . . . . . . *ALL

+ for more values

Output . . . . . . . . . . . . . *

第 5 页 共 43 页

技术经验

File attributes . . . . . . . . *ALL

+ for more values

1.12、 DSPOBJD

显示文件是由哪个源文件编译过来的。

Object . . . . . . . . . . . . . > LDWHJBL01

Library . . . . . . . . . . . > GJCSDTA

Object type . . . . . . . . . . > *FILE

执行,8,执行

1.13、 DSPFFD

显示数据库文件(即表)的字段信息,包括名称、类型,长度,及其源定义文件中所

引用的字段类型定义文件等。

File . . . . . . . . . . . . . . > DWXXB

Library . . . . . . . . . . . > GJDWDTA

Output . . . . . . . . . . . . . *

第 6 页 共 43 页

技术经验

2、 object相关操作

2.1、 查看锁

DSPRCDLCK 查看数据库表记录锁的情况

WRKOBJLCK: 表名,库名,OBJECT TYPE项输入*file 执行

F6 查看member 锁,输入5,再输入10,执行,查看锁的详细信息。

输入4,end job。

2.2、 WRKOBJ

The Work with Objects (WRKOBJ) command shows a list of objects from

one or more libraries.

WRKOBJ,执行,输入要使用的obj名称等如下:

Object . . . . . . . . . . . . . GJ0101R1

Library . . . . . . . . . . . *ALL

Object type . . . . . . . . . . *ALL

第 7 页 共 43 页

技术经验

执行,即可找到要查找的目标,便可进行copy、delete等操作。

3、 Strpdm相关操作

3.1、 在OBJECT中查找某一字符串

在 WRKOBJPDM界面,在OBJECT前使用25,按执行键执行,找到第一个后在执

行,直到找完为止。

3.2、 在MEMBER中比较文件的不同

在 Work with Members Using PDM界面,在member前使用54,F4,输入要比

较的文件名按执行键执行。

3.3、 在Work with Members Using PDM窗口

F14,显示程序修改时间。

F14=Display date

F15=Sort date

F18 : compile in batch 改为Y ,编译时编译信息可以用DM看。

3.4、 如何使用帮助确定seu中规范表格式

第 8 页 共 43 页

技术经验

编辑状态下在第6列上写上规范表名,使用f4 ,显示格式帮助(如果是用I表定义数

据结构,还应该在第19和20列输入“DS”,再按F4键。),再在需

要帮助的格式项上f1,则显示该项的具体帮助。

3.5、 pdm窗口中F21打开命令窗口

3.6、 pdm窗口中F15可以用分屏的方式再打开一个源文件

3.7、 群体选择member

1、在第一个文件写要处理的操作类型如14,4,然后按住shift+F1。

3.8、 如何在DDS源文件中的进行字符串替换

在命令行输入:C AA BB A ,执行,即可以将所有AA用BB替换。

3.9、 如何隐藏DDS源文件中的某些行

SEU中有一个功能(XX=Block Exclude)作用是隐藏掉源文件中的某些行,使要查看

的上下文连接在一起显示。

可以按 F5=Refresh功能键来恢复原来的外观。

4、 Pgm相关操作

第 9 页 共 43 页

技术经验

4.1、 CRTPGM

CRTPGM 后,F1 查看CREATE是否成功,再F10,查看详细信息。

或者 DSPJOBLOG 查看,F10查看详细信息。

4.2、 UPDPGM

PGM的module重新编译后,PGM需要更新。

4.3、 WRKPGM

查找某一库下的某一rpg目标程序。

Wrkpgm 执行,输入程序名,库名,执行。可以对找到的目标进行操作。

其中,5,执行三次,5,可以查看该目标是由哪一个源程序编译来的。

4.4、 DSPPGM

查看某一库下的某一rpg目标程序的属性。

Dsppgm执行,第一屏显示基本信息,第二屏显示文件大小信息,第三屏显示该pgm

由哪些模块编译而成,在某一模块前输入5,可以查看该目标模块是由哪一个源程序编译

来的。

第 10 页 共 43 页

技术经验

4.5、 调试

1、ILE RPG程序的调试:

14+f4,输入编译项,f10,将DEBUGGING VIEW 改为 *SOURCE,编译。

在命令行输入strdbg+f4,输入编译项,将Update production files改为 *yes ,否

则调试时无法打开文件,F6设置断点。

CALL 程序,F10 单步执行,F11 查看变量值。F12运行到下一断点。

调试完成,ENDDBG

2、含module程序的调试:

要调试的每个module分别15+f4,f10,将DEBUGGING VIEW 改为 *SOURCE,

编译。

在命令行输入strdbg+f4,输入主module编译项,将Update production files改为

*yes ,否则调试时无法打开文件,F6设置断点。

CALL 程序,F10 单步执行,F11 查看变量值。当想调试被调用module时,使用

shift+f10进入被调用module。

3、RPG程序调试时,如果有更新数据库的操作(不管是sql语句,还是rpg语句),

将Update production files改为*yes ,否则系统认为数据库是只读的,不能更新数据库。

第 11 页 共 43 页

技术经验

如delete,update等语句执行时,sqlcode会小于0,报-7008错误。此时的现象是执

行程序时结果正确,调试时就会出错,报-7008错误。

4、如果系统没有装DEBUG工具的,还有一个特别简单的方法进行调试,就是在需要

看变量值的地方加上DSPLY语句,这个也是个很不错的方法,就是特别麻烦,每次加上之

后都要重新编译程序。

5、使用WATCH 变量名,可以一直在屏幕的上方显示变量名,非常方便。要取消就

用UNWATCH 变量名。或者DEBUG时 在底线输入 'W + 空格 + 变量名' 回车, 是对

该变量进行跟踪,程序运行时该变量的值的变化在窗口左上角显示。可以同时对多个变量进

行跟踪。

6、SHIFT + F11 (F23) 是改变变量的值

4.6、 执行

c +F4

call +F4

sbmjob + f4 +call + f4 后台执行

执行后,F1 查看信息,F10查看详细信息

4.7、 存储过程调用PGM程序

第 12 页 共 43 页

技术经验

1、当rpg程序和前台程序使用一个事务用存储过程调用时:

rpg程序15编译,然后crtpgm时将activation group 参数改为*caller,CL程序

中不要START:

STRCMTCTL LCKLVL(*CHG) CMTSCOPE(*JOB) +

DFTJRN(GJJJRN)

ENDCMTCTL

存储过程创建: 在导航器中创建外部过程,配置相应的入口出口参数,使用的rpg

程序等(ip-数据库-库-右键-新建-过程-外部)。

2、当rpg程序和前台程序不使用一个事务用存储过程调用时:

rpg程序14或15编译,15时crtpgm将activation group 参数改为*caller

存储过程创建: 在导航器中创建外部过程,配置相应的入口出口参数,使用的rpg

程序等(ip-数据库-库-右键-新建-过程-外部)。

5、 编译相关操作

5.1、 编译选项

1、编译时,输入14,然后按f4,可以选择编译后文件存放的库。

第 13 页 共 43 页

技术经验

2、编译时,14或15后,F10是可以选择附加参数,F9可以选择所有参数。

5.2、 查看编译错误信息

1、WRKMSG,DSPMSG可以查看编译成功与否信息

2、编译出错时,系统提示错误级别,一般00级错误可以忽略,其他级别错误数字越

大,错误程度越严重!根据出错的级别进行处理时应该先处理高级别的错误,再处理底级

别的错误!

3、由于系统在进行编译时,将出错的信息写成了SPOOL FILE,因此我们就要看SPOOL

FILE的内容来确定出错的内容和相关语句。

因此,编译后,DM(DSPMSG)可以查看编译是否成功,SP查看编译详细信息。

SP,5查看与源文件同名的编译文件,B,执行,到文件尾,找到error字样,前翻页,

找到错误号,然后查找该错误码的详细信息(shift+F4),根据该错误信息进行查错修改。

5.3、 物理文件的编译

PF文件编译时,

其中

MEMBER SIZE项控制PF文件的记录条数:输入*NOMAX,则没有条数限制。

Member size:

第 14 页 共 43 页

技术经验

Initial number of records . . 10000 1-2147483646, *NOMAX, *SAME

初始表的记录数, *NOMAX,表示没有条数限制,具体数值则为记录条数。

Increment number of records . 1000 0-32767, *SAME

当该表记录数达到Initial number of records规定的条数时,一次可以增加的条数。

Maximum increments . . . . . . 3 0-32767, *SAME

当该表记录数达到Initial number of records规定的条数时,可以增加的次数。

 REUSE DELETED RECORDS选项控制表空间是否可以重复利用:选YES则,

在记录删除后其空间可以再利用,否则改空间不能重复利用,只有再RGZPFM后,才能重

新利用该空间。

 LANGUAGE ID项控制使用何种语言。

 CODED CHARACTER SET ID 项控制选用何种字库:一般是935,1388(该

字库GB字库)

物理文件编译后,

 要添加日志

物理文件或逻辑文件如修改后重新编译,相关的RPG程序都需要重新编译

第 15 页 共 43 页

技术经验

5.4、 RPG程序的编译

编译RPG程序时,将Commitment control 项设置为NONE,

事务控制,使用人为的事务控制,即commit或rollback。

不使用系统自动的

5.5、 群体编译

1、在第一个文件写14,然后按住shift+F1。

2、批量编译文件时,使用shift+f6,可以批量定制编译后文件存放的库。

6、 备份恢复

6.1、 创建SAVF类型文件,用于备份library、obj

CRTSAVF:执行

在SAVE FILE 输入 要创建的文件名

LIBRARY 输入库名,执行即可

6.2、 清空SAVF

CLRSAVF FILE(BFGLB/&BCKF1)

6.3、 删除文件(如SAVF等)

第 16 页 共 43 页

技术经验

DLTF FILE(BFGLB/&BCKF1)

6.4、 备份library

SAVLIB: 输入要备份的library,在device项输入*SAVF,执行。在SAVE FILE 项输

入要备份到的文件(该文件必须先创建),library项输入备份到的library,执行即可。如

果该文件存在数据,输入G清除

6.5、 清除library

CLRLIB: 执行

在library项输入要清除的library名,执行

6.6、 恢复library

RSTLIB:

SAVED LIBRARY 输入被备份的库名

DEVICE输入 *savf

SAVE FILE 输入备份到的文件名

LIBRARY输入备份到的库名

第 17 页 共 43 页

技术经验

F10:

在Restore to library输入要恢复到的库名GJGRDTA

6.7、 savobj

6.8、 rstobj

例如: 将GJCSDTA下的SDWBGBL65打包到HOUZG下的,恢复到

gjgrdta下。

Objects . . . > SDWBGBL65

Saved library . . . . . . . . . > GJCSDTA

Device . . . . . . . . . . . . . > *SAVF

Save file . . . . . . . . . . . > AAA

Library . . . . . . . . . . . > HOUZG

Restore to library . . . . . . .GJGRDTA

6.9、 DSPSAVF

查看savf文件中包含那些文件

第 18 页 共 43 页

技术经验

6.10、 SavXXX时使用压缩方式(savobj/savlib/…)

在备份到磁带或将库、表单保存为SAVF时,可改动如下参数节约磁盘空间:

在SAVXXX命令中按F10后,会有参数DTACPR(Data compression),其缺省值

为*DEV,此时如存数据到*SAVF时不会被压缩,即不能节省磁盘空间,而将此参数改为

*YES,可以达到节省空间的目的。

6.11、 磁带操作

INZTAP(Initialize Tape) 格式化磁带

DSPTAP(Display Tape) 显示磁带内容

7、 日志相关操作

7.1、 日志概述

日志(Journal)即其他数据库的log,当数据需要commit/rollback或表上定义了触

发器、参照完整性(referential integrity)时,表需要日志。

日志由journal和journal receiver组成。Journal相当于一张登记表,记录哪些表是

有日志的,journal receiver记录日志实际上需要记载的内容(表的创建、打开、增加、修

改、删除、权限更改等)。一个journal最多关联(attach)两个日志接收器(journal

receiver)。Journal管理journal receiver的方法有两种,*SYSTEM和*USER

crtjrn或chgjrn时通过Manage receivers参数设置。

第 19 页 共 43 页

,在

技术经验

日志接收器和数据库表最好存放在不同的ASP(磁盘组)上。

日志备份时先备份表,再备份日志和日志接收器,恢复时要先恢复日志和日志接收器,

再恢复表。

7.2、 创建日志

创建一个日志文件可按如下方法:

1、建立日志接收器:

CRTJRNRCV JRNRCV(AAA/TESTJRNRCV)

其中: AAA是库名, TESTJRNRCV是日志接收器名

在这个命令中是通过参数 Journal receiver threshold 来控制日志的大小。

2、建立日志:

CRTJRN JRN(DINI/TESTJRN) JRNRCV(DINI/TESTJRNRCV)

其中: AAA是库名, TESTJRN是日志名, TESTJRNRCV是日志接收器名;其中如下参数

需要指定:

Manage receivers . . . . . . *SYSTEM *USER, *SYSTEM

第 20 页 共 43 页

技术经验

Delete receivers . . . . . . . . *YES *NO, *YES

Delete receivers 参数指定系统是否可以删除journal receivers。

3、启动物理文件的日志

STRJRNPF FILE(AAA/TABEL01) JRN(DINI/TESTJRN)

其中: AAA是库名,TABEL01是表名, TESTJRN是日志名

4、查看日志(见7.3)

DSPJRN JRN(DINI/TESTJRN) FILE((DINI/TABEL01))

命令查看日志TESTJRN;

5、修改日志

CHGJRN JRN(GJGRDTA/GJJJRN)

6、使用命令 APYJRNCHG 根据JRN 恢复物理文件向后恢复。

7、使用命令 RMVJRMCHG 根据JRN 恢复物理文件向前恢复。

7.3、 在AS/400上如何删除日志(JOURNAL)

第 21 页 共 43 页

技术经验

在AS/400可能会对一些物理文件建立跟踪日志,到时候可能又不需要这些文件了,

但日志文件会不断增多。这时用户要删除这时物理文件上的日志(JOURNAL),但无法正

常删除,其实只要按照以下步骤就可删除JOURNAL:

1、用命令ENDJRNPF 或 ENDJRNAP终止这个物理文件或访问路径上的所有

JOURNAL。

2、用命令DLTJRN删除JOURNAL。

3、用命令DLTJRNRCV删除JOURNAL RECEIVER。

7.4、 通过日志查看数据变化

查看当前日志属性:

WRKJRNA JRN(GJGRDTA/GJJJRN)

找到JRNRCV 存放库。

查看该库下有哪些日志:

WRKLIB LIB(@JRNRCVLIB)

找到TYPE为*JRNRCV的日志文件,

8,执行查看日志文件的时间,找到对应时间的日志文件。

第 22 页 共 43 页

技术经验

查看对应日志文件中的日志:DSPJRN

Journal . . . . . . . . . . . . > GJJJRN Name, *INTSYSJRN

Library . . . . . . . . . . . > GJGRDTA Name, *LIBL, *CURLIB

Journaled physical file:

File . . . . . . . . . . . . . > LTZQCB Name, *ALLFILE, *ALL

Library . . . . . . . . . . > GJGRDTA Name, *LIBL, *CURLIB

Member . . . . . . . . . . . . *FIRST Name, *FIRST, *ALL

+ for more values

Range of journal receivers:

Starting journal receiver . . > GJJRCV1531 Name, *CURRENT, *CURCHAIN

Library . . . . . . . . . . > @JRNRCVLIB Name, *LIBL, *CURLIB

Ending journal receiver . . . > *CURRENT Name, *CURRENT

Library . . . . . . . . . . Name, *LIBL, *CURLIB

第 23 页 共 43 页

技术经验

Starting sequence number . . . . *FIRST

Starting date and time:

Starting date . . . . . . . . > 20050629 Date

Starting time . . . . . . . . > 000000 Time

More..

执行,根据code和type,time查看日志(可以F1,在F2查看帮助,查看code和

type的含义),找到code为R,type为DL(即删除物理文件记录)的记录,5,执行,F10,

查看属性和详细属性,可以查看删除的是哪些数据,以及删除该数据的程序名称。

code为R,type为DL(即删除物理文件记录)

code为R,type为PT(即插入物理文件记录)

code为R,type为UB(即update物理文件前的记录)

code为R,type为UP(即update物理文件后的记录)

code为R,type为BR(即ROLLBACK前的记录)

code为R,type为UR(即ROLLBACK后的记录)

第 24 页 共 43 页

技术经验

8、 仿真器

8.1、 使用仿真器

使用仿真器连接as400时,在通讯-配置中,主机代码页选1388简体中文扩展。

8.2、 使用仿真器传送文件到400

菜单-操作-将文件发送到主机

点击详情,修改为:

第 25 页 共 43 页

技术经验

9、 用户

9.1、 查看当前用户

按住shift+esc,7,执行 或 DSPWSUSR *

按住shift+esc,c,执行,可以使用特殊功能。

9.2、 显示用户属性

DSPUSRPRF:

10、 系统字符集

第 26 页 共 43 页

技术经验

10.1、 400和客户机的码制转换

400上 935 对应客户机 1381

400上1388对应客户机的1386

11、 系统操作

11.1、 使用GO帮助查找命令

go cmddsp

go cmdlck

… …

11.2、 DSPJOBLOG

DSPJOBLOG 执行,F10,可以查看当前session的操作的成功与否信息。

11.3、 查看log

DSPLOG:F4,可以输入起始时间,终止时间,查看该段时间内的log文件。

11.4、 查看错误号的含义

第 27 页 共 43 页

技术经验

WRKMSGD:可以查看某一消息的具体含义,级别。

或者:WRKMSGF:QCPF*,12

11.5、 清除消息队列中的信息:

WRKOUTQ,执行,找到QPRINT,14,执行。

找到QEZDEBUG,14,执行。

11.6、 wrklnk 相当于unix下的ls

11.7、 增加当前库列表

ADDLIBLE: *FIRST 临时改变当前连接的库列表,退出SESSION后,此改变失效。

CHGLIBL: 改变session当前库列表

CHGSYSLIBL: 改变系统当前库列表

DSPLIBL:显示当前库列表

11.8、 ftp操作

1、pc 机ftp到400:

第 28 页 共 43 页

技术经验

cd 库名

QUOTE TYPE C 1381 解决汉字乱码问题(仅get起作用)

get

mget object.*

mget *.*

quote site namefmt 1

get

2、在400上执行FTP:

FTP 客户端ip地址

LTYPE C 1381

MPUT 库/目标.*

执行后文件存在ftp目录下。

3、830、820之间ftp:

第 29 页 共 43 页

技术经验

ftp 192.16.200.32

cd houzg

lcd houzg

bin

na 1

get (replace

4、ftp中F7可以查看使用过的语句。

11.9、 如何将屏幕内容写到文件中

用户可以将自己的操作屏幕写到一个物理文件中,用来记录用户自己的操作过程(在做

培训时会很有用),方法是使用命令:

STRCPYSCN SRCDEV(*REQUESTER)

OUTDEV(*NONE) OUTFILE(mylib/myfile)

并在相继出现的系统信息回答屏中回答‘G’,以后用户的操作屏幕会全部输出到文件:

mylib/myfile中,使用ENDCPYSCN可以结束此功能,恢复正常操作。

第 30 页 共 43 页

技术经验

该物理文件可以在400上用sql语句查询。

11.10、 发送消息

SNDBRKMSG (Send Break Message) 送出立即消息(此命令会中断使用者操作画面

盖住 , 并将消息显示在画面)

SNDMSG MSG(SDJFLSDKFJ) TOUSR(*SYSOPR)

11.11、 如何删除AS/400中的系统日志

AS/400管理员一般都要定期清理没用的系统日志,会用命令go cleanup定制。

AS/400定期自动清理功能还有一种简单的方法:有时为了节省系统的硬盘空间,会

手工清理,下面介绍其他两种简单的命令也可以清除没用的系统日志:

1、 在AS/400的命令行上执行下面这个命令:

WRKF FILE(*ALL/QHST*)

执行后可以用OPTION 4删除已没有用的系统日志

2、 在命令行中执行 WRKOBJ *ALL/QHST* 也可将所有的系统日志列出。

11.12、 如何释放QSPL库下的文件占用大量的磁盘空间

第 31 页 共 43 页

技术经验

QSPL库下的文件包含系统中所有的假脱机文件,将没有用途的假脱机文件删除掉后,

此库中的文件的大小并不能立刻变小,具体所占空间释放时机根据系统资源情况而定,若

需要人工立即回收可使用命令:

RCLSPLSTG

就能立即真正收回被占用的磁盘空间。

11.13、 如何在AS/400上显示先前已执行过的所有命令

1、DSPJOBLOG,显示命令行操作命令成功与否的信息。

2、CALL QCMD ,执行,F10

3、 F9

11.14、 问题分析器

wrkprb,执行,查看相关的问题分析。

11.15、 DSPMSG QSYSOPR

查看系统是否有不正常讯息或响应讯息

11.16、 如何查看系统message

第 32 页 共 43 页

技术经验

DSPMSG MSGQ(*SYSOPR)

或者 登录到主菜单,8,4

11.17、 如何让系统消息自动弹出在用户窗口

1, chgmsgq:改变当前session的消息处理应答机制

其中: delivery指定为*break,则有系统消息时弹出,*hold则有系统消息时等待

用户做出回应。

Severity code filter: 指定弹出的消息的级别。

第 33 页 共 43 页

技术经验

2.Chgusrprf:改变用户的消息队列,即

MESSAGE QUEUE: QSYSOPR

DELIVERY: *BREAK

SEVERITY CODE FILTER: 30。

12、 dataq相关操作

12.1、 创建dtaq

CRTDTAQ

Dmpobj :将dataq中的信息写入文件中

DMPOBJ OBJ(GJCSDTA/HOU1) OBJTYPE(*DTAQ)

Wrkoutq找到QEZDEBUG,查看dmpobj写入的内容。

GO CMDDTAQ

Create Data Queue CRTDTAQ

Work with Data Queues WRKDTAQ

第 34 页 共 43 页

技术经验

12.2、 发送dtaq

CALL 'QSNDDTAQ' 91

PARM DNQD

PARM LNQD

PARM ELQD

PARM ERQD

其中, DNQD 10A ,DTAQ 名

LNQD 10A,lib

ELQD 5P,0 DTAQ ENTRY 长度

ERQD 要写入dtaq的内容

调用该程序发送dtaq时,如果dtaq定义时maximum entry length小于128,则

需要指定elqd参数值方能发送成功,大于等于128时,则可不指定该参数。

12.3、 删除dtaq

Delete Data Queue DLTDTAQ 或者

第 35 页 共 43 页

技术经验

Wrkobj:找到该dtaq,4,删除。

13、 导航器

13.1、 在导航器中可以执行call 400 程序,create等语句

如call _client('-H172.16.200.69', '-p10060', '-lGJCSDTA', '-fDWQK')

ctrl + r执行

可以观察返回值等

在400上sq中可以执行create,drop等语句创建删除表存储过程等。

14、 RPG编程相关

14.1、 关于sql语句在sqlrpgle程序中的使用

当要处理的表很大时,在rpgle中使用sql语句,可能会花费相当多的时间,因此,

对于大表的操作尽量少用或者不用sql语句为宜。

14.2、 chain 和setll

chain后和%found 搭配,不能和%eof搭配。

setll后和%eof搭配,不能和%found搭配。

第 36 页 共 43 页

技术经验

14.3、 RPG事务控制

1、程序事务控制

RPG程序要想加事务控制,必须写一个CLLE类型的文件启用事务控制,再在该文件

中调用带有commit,rolbk的RPG程序。

PGM PARM(&p_sldm &p_fhxx)

DCL VAR(&P_sldm) TYPE(*CHAR) LEN(25)

DCL VAR(&P_FHXX) TYPE(*CHAR) LEN(100)

STRCMTCTL LCKLVL(*CHG) CMTSCOPE(*JOB) +

DFTJRN(GJJJRN)

MONMSG MSGID(CPF8351)

CALL PGM(GJ0105R1) +

PARM(&P_sldm &P_fhxx )

ENDCMTCTL

ENDPGM

第 37 页 共 43 页

技术经验

2、RPG中使用事务控制时,先做write等操作,再做sql语句时,sql语句看不到

write等操作的结果,可以在write后commit,再做sql语句,然后在commit。

14.4、 RPG程序调用

RPG中,常量不能作为call、callb时的入口参数。

14.5、 如何对指定库中所有物理文件(PF)进行重整

下面是一个CL程序可以实现将指定库下面所有删除的空间比>15%的物理文件进行

重 整。

/* 程序入口 */

STRCLPGM: PGM PARM(&LIBRARY)

/* 以下申明变量和文件 */

DCL VAR(&LIBRARY) TYPE(*CHAR) LEN(10)

DCL VAR(&PERCENT) TYPE(*DEC) LEN(4 3)

DCLF FILE(QTEMP/WORKFILE) RCDFMT(QWHFDMBR)

/* 通过DSPFD将LIB下所有的MEMBER属性写入QTEMP/WORKFILE */

第 38 页 共 43 页

技术经验

DSPFD FILE(&LIBRARY/*ALL) TYPE(*MBR) +

OUTPUT(*OUTFILE) OUTFILE(QTEMP/WORKFILE)

/* 逐条读取记录 */

NEXT: RCVF RCDFMT(QWHFDMBR)

MONMSG MSGID(CPF0864) EXEC(GOTO CMDLBL(ENDCLPGM))

/* 如果是物理数据文件,则计算删除的空间比 */

IF COND(&MBFILA *EQ '*PHY') THEN(DO)

CHGVAR VAR(&PERCENT) VALUE(&MBNDTR / &MBNRCD)

MONMSG MSGID(MCH1211) EXEC(GOTO CMDLBL(NEXT))

/* 如果空间比>15%,提交JOB来RGZPFM */

IF COND(&PERCENT *GT .15) THEN(DO)

SBMJOB CMD(RGZPFM FILE(&MBLIB/&MBFILE) MBR(&MBNAME))

ENDDO

第 39 页 共 43 页

技术经验

ENDDO

GOTO CMDLBL(NEXT)

ENDCLPGM: DLTF FILE(QTEMP/WORKFILE)

ENDPGM

备注:运行程序前,现通过DSPFD来创建QTEMP/WORKFILE,&MBNDTR和

&MBNRCD应该都是WORKFILE中的字段名。

14.6、 取出表中前n条记录

在OS/400 V5R1M0中,SELECT语句中新增了子句: FETCH FISRT n ROW(S) ONLY,

使用方法如下:

1. 从表t1中取符合条件的第一条记录:

SELECT * FROM t1 ORDER BY age FETCH FISRT ROW ONLY

2. 从表t1中取符合条件的前20条记录:

SELECT * FROM t1 ORDER BY age FETCH FIRST 20 ROWS ONLY

14.7、 UNION

第 40 页 共 43 页

技术经验

UNION操作可将两个或更多不同的SQL语句的结果合并成一个结果集,唯一的限制

是每个表或SQL语句必需有相同的列类型、数目和顺序。

UNION 运算符通过组合其他两个结果表(例如 TABLE1 和 TABLE2)并消去表中任

何重复行而派生出一个结果表。当 ALL 随 UNION 一起使用时(即 UNION ALL),不

消除重复行。两种情况下,派生表的每一行不是来自 TABLE1 就是来自 TABLE2。

14.8、 Eval 用法

H 四舍五入

R 小数计算时保留计算结果足够的位数:

如 变量w_jg 定义为10,2则

w_jg=1.01*1.01=1.0201

14.9、 For循环

Rpg中可以使用for循环

C for w_cs=1 to p_zs

C eval w_jg=w_jg*w_ds

C endfor

第 41 页 共 43 页

技术经验

其中 1<=w_cs<=p_zs

14.10、 逻辑文件中必须有k值

14.11、 c程序封装为存储过程

400c程序封装为存储过程时,定义入口参数为varchar变量,指定PARAMETER

STYLE GENERAL WITH NULLS来忽略空格,如。

CREATE PROCEDURE _JG_CLIENT (

IN P_CS1 VARCHAR(20) ,

IN P_CS2 VARCHAR(20) ,

IN P_C3 VARCHAR(20) ,

IN P_CS4 VARCHAR(20) )

LANGUAGE C++

SPECIFIC _CLIENT

NOT DETERMINISTIC

MODIFIES SQL DATA

第 42 页 共 43 页

技术经验

CALLED ON NULL INPUT

EXTERNAL NAME 'GJCSRUN/JG_CLIENT'

PARAMETER STYLE GENERAL WITH NULLS ;

14.12、 利用RRN(相对记录号)处理与记录号相关的信息

1、显示记录顺序:

SELECT RRN(file_name), field1,field2,...FROM file_name

2、选出相对记录号大于10000的记录:

SELECT RRN(file_name), field1,field2,...FROM file_name

WHERE RRN(file-name) > 10000

3、更新相对记录号大于10000的记录中某字段的值:

UPDATE file-name SET field1 = value WHERE RRN(file-name) > 10000

第 43 页 共 43 页