免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: xuguopeng
打印 上一主题 下一主题

请问谁在400上写过触发器和存储过程? [复制链接]

论坛徽章:
0
11 [报告]
发表于 2003-09-01 17:46 |只看该作者

请问谁在400上写过触发器和存储过程?

好象是吧.

论坛徽章:
0
12 [报告]
发表于 2003-09-02 08:42 |只看该作者

请问谁在400上写过触发器和存储过程?

1、tianyi说的不错,可惜说的是日志而不是触发器,建立触发器用ADDPFTRG ,此指令说明很详细,自己调出来看看就知道了。
相关指令还有RMVPFTRG CHGPFTRG PRTTRGPGM
2、存储过程是争议非常大的开发方法,在后台程序开发中能不用就不用,建议你们使用RPG+SQL或C+SQL来实现。

论坛徽章:
0
13 [报告]
发表于 2003-09-02 08:55 |只看该作者

请问谁在400上写过触发器和存储过程?

关键是公司以前用的就是存储过程,现在也不想改变,可苦了我了

论坛徽章:
0
14 [报告]
发表于 2003-09-02 12:33 |只看该作者

请问谁在400上写过触发器和存储过程?

AS/400上写触发器和写普通程序没有太大的区别,关键是针对需要用触发器管理的物理文件在程序内定义适用的数据区,也就是触发器用来接收系统传送过来的该物理文件对应记录被操作前后的数据的变量区。
先写一个触发器程序,然后用命令ADDPFTRG将其和物理文件捆绑起来。THATIS ALL。

下面是一个实际的例子,是对一个LOG文件进行监视的触发器。当该LOG文件中插入的记录的某一字段是错误码时,调用一个CL程序向特定MSGQ发送通知。程序非常短,估计不必做什么说明也能看明白的(多注意数据定义部分的comment)。

*\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*
      *   MODULE         SNDLOGTRG                                        *
      *   REMARK         RETURN ERR MESSAGE IF THERE IS                   *
      *   CORDING-DATE   2002/01/15                                       *
      *   AUTHOR                                                    *
      *\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*
     H COPYRIGHT('COPYRIGHT xxx')
     H DATEDIT(*YMD/)
      *
     D                 DS
     D ENDCD                   1      2
     D END1                    1      1
     D END2                    2      2
      *
     DRECMAP           DS
     D  FILEID                 1      8    INZ                                 
     D  FILL01                 9    158    INZ                                 
     D  ENDCODE              159    160    INZ                                 
     D  ERRCODE              161    162    INZ                                 
     D  FILL02               163    253    INZ                                 
      *
     DPM1              DS
      * PHYSICAL FILE NAME
     D  FNAME                  1     10    INZ                                 
      * PHYSICAL FILE LIBRARY
     D  LNAME                 11     20    INZ                                 
      * MEMBER NAME
     D  MNAME                 21     30    INZ
      * TRIGGER EVENT
     D  TEVEN                 31     31    INZ
      * TRIGGER TIME
     D  TTIME                 32     32    INZ
      * COMMIT LOCK LEVEL
     D  CMTLCK                33     33    INZ
      * RESERVED
     D  FILL1                 34     36    INZ
      * CCSID
     D  CCSID                 37     40B 0 INZ
      * RESERVED
     D  FILL2                 41     48    INZ
      * OFFSET TO THE ORIGINAL RECORD
     D  OLDOFF                49     52B 0 INZ
      * LENGTH OF THE ORIGINAL RECORD
     D  OLDLEN                53     56B 0 INZ   
      * OFFSET TO THE ORIGINAL RECORD NULL BYTE MAP
     D  ONOFF                 57     60B 0 INZ
      * LENTH OF THE NULL BYTE MAP
     D  ONLEN                 61     64B 0 INZ
      * OFFSET TO THE NEW RECORD
     D  NOFF                  65     68B 0 INZ
      * LENTH OF THE NEW RECORD
     D  NEWLEN                69     72B 0 INZ
      * OFFSET TO THE NEW RECORD NULL BYTE MAP
     D  NNOFF                 73     76B 0 INZ
      * LENTH OF THE NULL BYTE MAP
     D  NNLEN                 77     80B 0 INZ
      * RESERVED
     D  RESV3                 81     96    INZ
      * OLD RECORD
     D  OREC                  97    349    INZ
      * NULL BYTE MAP OF OLD RECORD
     D  OOMAP                350    350    INZ
      * NEW RECORD
     D  NREC                 351    603    INZ   
      * NULL BYTE MAP OF NEW RECORD
     D  NNMAP                604    604    INZ
     D*M2              DS
     D* LENG                   1      4B 0 INZ
     C     *ENTRY        PLIST
     C                   PARM                    PARM1           604
     C                   PARM                    PARM2             4 0
      *\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*
      *                      MAIN PROCEDURE                               *
      *\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*
     C                   MOVE(P)   PARM1         PM1
     C*                  MOVE(P)   PARM2         PM2
      *
     C                   MOVE(P)   NREC          RECMAP
     C                   MOVE      ENDCODE       ENDCD
      *
     C                   SETOFF                                       90
     C                   TESTB     X'FF'         END1                 90
     C     *IN90         IFEQ      '0'
     C                   CALL      'SNDERRMSG'
     C                   PARM                    FILEID
     C                   SETON                                        LR
     C                   RETURN
     C                   ENDIF
      *
     C                   SETOFF                                       90
     C                   TESTB     X'FF'         END2                 90
     C     *IN90         IFEQ      '0'
     C                   CALL      'SNDERRMSG'
     C                   PARM                    FILEID
     C                   ENDIF
     C                   SETON                                        LR
     C                   RETURN
      *\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*
      *                      SUB PROCEDURE                                *
      *\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*

论坛徽章:
0
15 [报告]
发表于 2003-09-02 14:17 |只看该作者

请问谁在400上写过触发器和存储过程?

这是个RPG的触发器吧,主程序和带注释的变量定义部分还能看懂,最前面的几个没注释的变量不知道是做什么用的。
有没有在400上用SQL写触发器的?现在有287个触发器要重写,如果全让我用RPG写,那。。。。。。。。。。。。。。。

论坛徽章:
0
16 [报告]
发表于 2003-09-02 15:47 |只看该作者

请问谁在400上写过触发器和存储过程?

我一直想要了解怎样在as400上编触发器的程序。也查阅了有关ibm的书籍,但是一直没有搞懂如何在程序中定义传递参数用的数据区。是否有哪位大侠具体说明一下

论坛徽章:
0
17 [报告]
发表于 2003-09-02 16:34 |只看该作者

请问谁在400上写过触发器和存储过程?

原帖由 "xuguopeng" 发表:
这是个RPG的触发器吧,主程序和带注释的变量定义部分还能看懂,最前面的几个没注释的变量不知道是做什么用的。
有没有在400上用SQL写触发器的?现在有287个触发器要重写,如果全让我用RPG写,那。。。。。。。。。?.........


前面没注释的那几个变量是无关紧要的。
用SQL也能写触发器的,但我没用过,还请哪位行家指点指点。
另外作为题外话,象触发器这种应用,我认为从执行效率来说,应该还是采用RPG(当然C和COBOL也是好的)比SQL合适一点。

论坛徽章:
0
18 [报告]
发表于 2003-09-02 20:30 |只看该作者

请问谁在400上写过触发器和存储过程?

恩  专业人士也是建议用RPG和SQL交互这种方式来写

论坛徽章:
0
19 [报告]
发表于 2003-09-03 16:34 |只看该作者

请问谁在400上写过触发器和存储过程?

400下sql的存储过程和触发器写是可以的,但有问题(存储过程在事务处理方面有不回滚的情况)不知5.2上如何,而且嵌套、光标支持的也不好,建议少用。

论坛徽章:
0
20 [报告]
发表于 2003-09-03 19:42 |只看该作者

请问谁在400上写过触发器和存储过程?

倒~ 现在公司的计划是这样的:先把表通过SQL导入到400,然后把存储过程翻译成400的DB2下SQL的格式,然后由我根据翻译过来的SQL用RPG写,我从来没用RPG写过存储过程啊,哪位大虾写过??贴出个样本看看好吗???不胜感激~!!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP