领测软件测试网
我想对一个物理文件加上一个更新触发器,触发执行一个没有关联意义的程序.
(没有用过触发器,想试试如何使用)
但是当调用一个对文件纪录进行更新的程序时,却出现CPF502B错误,然后我试着改了一些触发器添加时候的参数,比如TRG,ALWREPCHG,THDSAFE这几
个,还是没有调用被触发的程序,错误信息为RPG1299.
TRGTIME是*BEFORE或者*AFTER的时候同样的情况。
xuguopeng 回复于:2004-06-19 00:33:37
|
你的触发器有问题,不是随便拿个程序就能当触发器的
|
qingzhou 回复于:2004-06-19 09:10:52
|
对PF的table建立触发器常见有2种途径:
1。OS/400命令行:
[u:b3172542d7]ADDPFTRG FILE(Library/File) TRGTIME(*BEFORE/*AFTER)
TRGEVENT(*INSERT/*UPDATE/*DELETE) PGM(Library/PGM)[/u:b3172542d7]
2。Navigator下:
主机名→数据库→库 ,然后用“鼠标右键”点击要建触发器的表的属性, 在属性菜单中选中“触发器”一栏, 并选择具体类别的触发器,并用"Lib name/PGM name"的格式填写触发器名至相应的触发器类别.
请先确认以上步骤是否正确。
|
fzrxh 回复于:2004-06-19 10:08:05
|
RPG1299错误代码完整信息呢?
可以把SPLF贴出来呀
|
icbcodc 回复于:2004-06-29 16:11:36
|
[quote:2a95ac6922="qm"]我想对一个物理文件加上一个更新触发器,触发执行一个没有关联意义的程序.
(没有用过触发器,想试试如何使用)
但是当调用一个对文件纪录进行更新的程序时,却出现CPF502B错误,然后我试着改了一些触发器添加时候..........[/quote:2a95ac6922]
建议你使用UPDDTA命令对文件进行更新,看是不是能正常触发TRIGGER。
|
icbcodc 回复于:2004-06-29 16:24:53
|
[quote:536de98f82="qm"]我想对一个物理文件加上一个更新触发器,触发执行一个没有关联意义的程序.
(没有用过触发器,想试试如何使用)
但是当调用一个对文件纪录进行更新的程序时,却出现CPF502B错误,然后我试着改了一些触发器添加时候..........[/quote:536de98f82]
我做过的一点经验:
系统对BEFORE TRIGGER的一些限制:
· Statements not allowed in a trigger program are CONNECT, SET CONNECTION, RELEASE, DISCONNECT, and SET RESULT SETS.
· RUNSQLSTM is not allowed in a trigger program.
· COMMIT and ROLLBACK are not allowed in a trigger program if the trigger program is running in the same activation group as the triggering program. COMMIT and ROLLBACK are not allowed in an SQL trigger.
· ALTER TABLE is not allowed in a trigger program when commitment control is active.
· Statements not allowed in a stored procedure or user-defined function that is running on a remote application server are CONNECT, SET CONNECTION, RELEASE, DISCONNECT, COMMIT, ROLLBACK and SET TRANSACTION.
· Statements not allowed in an SQL BEFORE trigger are INSERT, UPDATE, DELETE, ALTER TABLE, COMMENT ON, CREATE, DROP, GRANT, LABEL ON, RENAME, and REVOKE.
· The RETURN statement is not allowed in an SQL trigger.
· Statements not allowed in a secondary thread are CREATE TRIGGER, CREATE FUNCTION (SQL), and CREATE PROCEDURE (SQL).
下面是ACTIVATION TIME为BEFORE时,
|
| icbcodc 回复于:2004-06-29 16:25:34
| 如图
|
| icbcodc 回复于:2004-06-29 16:26:07
| 如图
|
| qm 回复于:2004-06-30 09:50:19
| TO xuguopeng:
请教具体有些什么要求?或者置顶的帖子里面有没有哪本里面有这方面的信息?
to qingzhou:
触发器是通过命令行加入的,跟你说的一样,这个应该是没有问题。
to fzrxh:
关于RPG1299的详细信息:
原因--メッセージ RPG1299 が RPG0099 より大きい場合( RPG0100 からRPG9999 の間)には,プログラム test001 がエラーで終了しました。そうでない場合には,プログラマー定義のエラー・サブルーチンによりプログラムが取り消され
ます。詳細については,前にリストされたメッセージを参照してください。
回復手順--メッセージで示されたエラーを訂正するか,あるいはアプリケーション
担当者に連絡してください。
其中test001为对文件进行添加更新纪录的程序,
大意是:信息RPG1299在比RPG0099大的场合(从RPG0100到RPG9999中间),程序TEST001由于错误而终止。不是那样的场合的时候,由于程序员定义的错误子程序,程序被取消。详细情况,见前一个错误信息。
而这个错误的前一个错误信息就是CPF502B,其信息如下:
メッセージ . . : トリガー・プログラムでエラーが起こった。
原因--データベースの挿入,更新,削除,または読み取り操作の結果として呼び出されたトリガー・プログラムが正常に実行されませんでした。エラーを判別するた
めには,ジョブ・ログ中の前のメッセージを参照してください。ライブラリーTST001LIB タイプ *SYS のトリガー CLEAR でのエラー・コードは 2 です。次のように,エラーの原因となったトリガーを判別するために,このエラー・コードを使用することができます。
1 -- *BEFORE *INSERT トリガー
2 -- *AFTER *INSERT トリガー
3 -- *BEFORE *UPDATE トリガー
4 -- *AFTER *UPDATE トリガー
5 -- *BEFORE *DELETE トリガー
6 -- *AFTER *DELETE トリガー
7 -- *READ トリガー
回復手順--トリガー・プログラムのエラーを訂正してください。その後で要求をや
り直してくだい。
メッセージに応答するための選択可能な項目 :
C -- 要求が取り消されます。
I -- 要求が無視されます。
大概说是因为触发器程序没有被正常执行。要判别错误,看JOBLOG中的前一条信息。TST001LIB 类型 *SYS の触发器CLEAR的错误代码是2。从这个可以判断错误的原因。
但是从这个代码只是知道了触发器加的时候的情况。而且在这个错误信息之前JOBLOG中没有别的错误信息。
to icbcodc :
我这个试验用的触发器程序就只有一行DSPLY的东西,肯定不会有系统对BEFORE TRIGGER的一些限制 的内容。
谢谢大家帮忙!欢迎继续关注菜鸟的学习过程!
| qingzhou 回复于:2004-06-30 09:58:35
| qm同志:关于RPG1299的详细信息日文大家如何看得清楚呀?你先转到中文仿真登陆后用汉语或者英语表示吧。 :em06: :em06: :em06:
| qm 回复于:2004-06-30 12:00:58
| 遗憾啊,没有中文第二语言包,最多去掉日文第二语言包恢复成英语的。顺便问下,怎么去掉日语第二语言包,然后怎么加上? :em06: 更改是立即生效吗?如果是,对当前其他登录的用户有什么影响?
| xuguopeng 回复于:2004-06-30 12:51:02
| CHGSYSLIBL XXXX *REMOVE
xxxx是语言库的名称 这只影响你当前使用的用户,注销后就失效了
| xuguopeng 回复于:2004-06-30 12:52:55
| http://bbs.chinaunix.net/forum/10/20040625/354579.html
这有段RPGLE的触发器
| qm 回复于:2004-06-30 15:07:03
| RPG1299的错误信息:
Message . . . . : Error RPG1299 caused program S3S001R to stop.
Cause . . . . . : If message RPG1299 is greater than RPG0099 (between RPG0100 - RPG9999), then program S3S001R ended in error. Otherwise a programmer-defined error subroutine canceled the program. See previously listed messages for more information.
Recovery . . . : Correct the error indicated by the message or contact the application coordinator.
previous error message:CPF502B
Message . . . . : CPF502B I/O error was detected in FT8CUSP (C G S D F).
Cause . . . . . : The RPG program S3S001R in library KBK003LIB received the
message CPF502B at statement 47000 while doing WRITE I/O operation on file
FT8CUSP. Actual file is KBK003LIB/FT8CUSP MEMBER - FT8CUSP. See the job log
for a complete description of message CPF502B.
Recovery . . . : Enter C to cancel, G to continue processing at *GETIN, S
to obtain a printout of system storage, D to obtain an RPG formatted
printout of system storage, or F to obtain a full formatted printout of
system storage.
Possible choices for replying to message . . . . . . . . . . . . . . . :
D -- Obtain RPG formatted printout of system storage.
| qm 回复于:2004-07-01 13:16:06
| [quote:433b8edadd="xuguopeng"]你的触发器有问题,不是随便拿个程序就能当触发器的[/quote:433b8edadd]
是不是只有带有你给出的RPGLE程序中两个DS结构作入口参数的才能作为触发器程序?
我试验了一下,实际触发器程序入口参数不一定只能有这两个参数,再多几个应该也没有问题吧?而且位置好像没有要求?
请指教!
| xuguopeng 回复于:2004-07-01 13:34:00
| 具体的我也没有深入去研究 数据结构是固定的吧
|
文章来源于领测软件测试网 https://www.ltesting.net/
|
|
|
|
|
|