• 软件测试技术
  • 软件测试博客
  • 软件测试视频
  • 开源软件测试技术
  • 软件测试论坛
  • 软件测试沙龙
  • 软件测试资料下载
  • 软件测试杂志
  • 软件测试人才招聘
    暂时没有公告

字号: | 推荐给好友 上一篇 | 下一篇

关于触发器的初级问题,请用过的大虾指教

发布: 2007-6-08 22:43 | 作者: seanhe | 来源: | 查看: 33次 | 进入软件测试论坛讨论

领测软件测试网
我想对一个物理文件加上一个更新触发器,触发执行一个没有关联意义的程序.
(没有用过触发器,想试试如何使用)
但是当调用一个对文件纪录进行更新的程序时,却出现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/


关于领测软件测试网 | 领测软件测试网合作伙伴 | 广告服务 | 投稿指南 | 联系我们 | 网站地图 | 友情链接
版权所有(C) 2003-2010 TestAge(领测软件测试网)|领测国际科技(北京)有限公司|软件测试工程师培训网 All Rights Reserved
北京市海淀区中关村南大街9号北京理工科技大厦1402室 京ICP备10010545号-5
技术支持和业务联系:info@testage.com.cn 电话:010-51297073

软件测试 | 领测国际ISTQBISTQB官网TMMiTMMi认证国际软件测试工程师认证领测软件测试网