2011-12-12 113 views
0

我需要创建一个由我的SQL触发器触发的数据队列; 的SQL触发器已经完成,但我不知道如何实现数据队列如何在AS400中创建由SQL触发器触发的数据队列?

+0

你似乎有很多的RPG/IBM我的问题。你应该查看[midrange.com](http://midrange.com)邮件列表。 [RPG-L](http://murl.me/rpgl)和[MIDRANGE-L](http://murl.me/midrangel)。那里有更多的专家可能会更好地回答你的问题。 –

+0

谢谢。我发了一个问题,但我觉得很难使用 –

回答

4

一般情况下,SQL意在数据库采取行动。与操作系统对象交互并不容易。但是,DB2 for i将允许您执行程序,包括将消息发送到数据队列的API:QSNDDTAQ。这是丑陋的。

call qsnddtaq ('DTAQ  ', 'LIBRARY ', x'0008F', 'From SQL') 

的参数是:

  1. 数据队列名(10个字节)
  2. 数据队列库名(10个字节)
  3. 消息长度(堆积(5,0))
  4. 邮件内容

如果SQL触发器使用变量而不是文字,它不需要做任何特殊的事情来格式化长度 - 显示的文字是内部包装(5,0)的样子。

如果我被分配这个任务我会创造一个CL程序并调用,而不是API。然后,我可以使用packed(15,5)作为长度参数,这是'自然'跨语言数字长度,并提供陷印错误。

+0

+1 - 同意;如果您要与非SQL对象通话,请将其包装在CL或RPGLE程序中,然后让触发器调用该对象。 (或者,只是使你倾倒的东西成作为队列的表,有一个经常性监测工作...) –

+0

谢谢,但我不很了解,对我来说是CL程序会适合太(我认为)只要我能做到这一点(因为我甚至不知道把文件放在哪里才能被as400执行)。但在这种情况下,如果我想只发送更改的数据(我知道因为thr触发器而发生了什么变化),我该怎么做?该表是:LIBRARY.TABLE,字段:〔A1,A2,A3],SQL查询: “选择A1,A2,从LIBRARY.TABLE A3其中??发生了什么变化?” –

+0

我不明白业务问题。我想你是说如果A1改变了,你想把A1的内容发送到数据队列。如果A2更改,则要将A2的内容发送到数据队列。我想你想要改变每个字段的单独消息?通常情况下,数据队列用于进程之间的通信。其他进程希望在数据队列消息中看到什么? –