2013-04-15 5 views
0

나는이 양식의 트리거가 있습니다 JSON 문자열

 
CREATE TRIGGER TBP701_UPDATE 
AFTER UPDATE ON TBP701 
REFERENCING OLD AS OLD_ROW 
NEW AS NEW_ROW 
FOR EACH ROW 
MODE DB2SQL 
INSERT INTO TBP702 (ID , IRN , EVENT , OLDVALUES , NEWVALUES , USER , ENTRYTIME) 
VALUES (DEFAULT , NEW_ROW . COLUMN1 , 'BUYBACK_ADD' , 
'{"column1":"' CONCAT OLD_ROW . COLUMN1 CONCAT '","column2":"' CONCAT OLD_ROW . COLUMN2 CONCAT '","column3":"' CONCAT OLD_ROW . COLUMN3 CONCAT '"}' , 
'{"column1":"' CONCAT NEW_ROW . COLUMN1 CONCAT '","column2":"' CONCAT NEW_ROW . COLUMN2 CONCAT '","column3":"' CONCAT NEW_ROW . COLUMN3 CONCAT '"}' , 
USER , CURRENT_TIMESTAMP) ;

내가 이전 및 tbp701의 새로운 값에 새 테이블에 삽입 할 필요를 json 형식. 위의 쿼리에서 JSON 문자열을 하드 코딩했습니다. 하지만 나는 그러한 트리거를 100 개의 테이블에 작성해야한다. 그래서 나는 다음과 같은 두 개의 매개 변수 트리거에서

  1. NEW_ROW/OLD_ROW 레퍼런스 및
  2. 테이블 이름에 걸릴 수있는 SQL 함수를 필요로

그것은 저에게 JSON 문자열을 반환해야합니다 모든 트리거가 실행 된 특정 테이블과 행의 열 그런 다음 모든 기능을 다시 사용할 수 있습니다.

필자는 db2 개념의 새로운 고급 기능에 익숙합니다. 그래서 설명적인 대답은 높게 평가 될 것입니다.

감사합니다.

답변

0

이 디자인을 채택하는 것은 끔찍한 실수입니다.

관계형 데이터를 JSON 형식으로 유지하기 위해 전체 두 번째 스키마를 만드는 것은 엄청난 악몽입니다. 일관성을 보장 (즉, 이러한 트리거를 통해)하면 상당한 오버 헤드가 추가됩니다.

응용 프로그램 계층에서 관계형 데이터를 구문 분석하여 JSON 형식으로 저장하는 것이 아닌가?

또는 XML 형식으로 데이터를 저장하고 DB2의 pureXML 기능을 활용할 수도 있습니다. 이 주제에 대해 developerWorks article이 있습니다.