광산 SQL 트리거에 의해 트리거되는 데이터 대기열을 만들어야합니다. SQL 트리거가 이미 완료되었지만 데이터 큐를 구현하는 방법을 모르겠다.SQL 트리거에 의해 트리거되는 AS400에서 데이터 대기열을 만드는 방법은 무엇입니까?
답변
일반적으로 SQL은 데이터베이스를 처리하기위한 것입니다. 운영 체제 개체와 상호 작용하는 것은 쉽지 않습니다. 그러나 DB2 for i에서는 메시지를 데이터 대기열에 보내는 API (QSNDDTAQ)를 비롯하여 프로그램을 실행할 수 있습니다. 그것은 추합니다.
call qsnddtaq ('DTAQ ', 'LIBRARY ', x'0008F', 'From SQL')
매개 변수 :
- 데이터 큐 명 (10 바이트)
- 데이터 큐 라이브러리 명 (10 바이트) ((5,0) 포장)
- 메시지 길이
- 메시지 내용
SQL 트리거가 리터럴은 길이를 형식화하기 위해 특별한 작업을 수행 할 필요가 없습니다. 표시된 리터럴은 팩 (5,0)이 내부적으로 보이는 것입니다.
이 태스크를 할당받은 경우 CL 프로그램을 작성하고 API가 아닌이를 호출합니다. 그럼 나는 '자연'크로스 언어 번호 길이뿐만 아니라 트래핑 오류를 제공하는 길이 매개 변수에 대한 포장 (15,5)를 사용할 수있을 것입니다.
+1 - 동의했다; SQL이 아닌 객체와 대화를하고 싶다면 CL 또는 RPGLE 프로그램으로 감싸고 대신 트리거를 호출하십시오. (또는, 단지 테이블을 만들어 대기열에 넣고 반복적 인 모니터 작업을 ...) –
고마워요.하지만 그것에 대해 많이 알지 못합니다. 저에게 CL 프로그램 역시 적합 할 것입니다. 나는 그것을 할 수있는 한 as400에 의해 실행되기 위해 파일을 어디에 둘 것인지조차 모르기 때문에) 생각한다. 그러나이 경우 데이터를 변경하려면 (변경 사항이 무엇인지 알기 때문에) 데이터를 변경하려면 어떻게해야합니까? 테이블 : LIBRARY.TABLE, 필드 : [a1, a2, a3], sql 쿼리 : "SELECT a1, a2, a3 from LIBRARY.TABLE WHERE what what ??" –
비즈니스 문제를 이해할 수 없습니다. A1이 변경되면 A1의 내용을 데이터 대기열로 보내려는 것입니다. A2가 변경되면 A2의 내용을 데이터 대기열로 보내려고합니다. 변경된 각 필드에 대해 별도의 메시지를 원한다고 생각하십니까? 일반적으로 데이터 큐는 프로세스간에 통신하는 데 사용됩니다. 다른 프로세스는 데이터 대기열 메시지에서 무엇을보고 싶습니까? –
많은 RPG/IBM i 질문이있는 것 같습니다. [midrange.com] (http://midrange.com) 메일 링리스트를 확인하십시오. [RPG-L] (http://murl.me/rpgl) 및 [MIDRANGE-L] (http://murl.me/midrangel). 귀하의 질문에 더 잘 답변 할 수있는 전문가가 많이 있습니다. –
감사합니다. 나는 질문을 게시했지만 사용하기가 매우 어려웠다. –