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 页


发布评论