2012-08-07 3 views
0

upate 트리거를 생성 중입니다. 정확한 열 이름이 무엇인지를 실제로 알지 못해도 테이블 열의 조건을 테스트해야하는 상황이 있습니다. 트리거는 일반적이며 다양한 열이있는 테이블에 적용 할 수 있습니다.SQL 문에서 동적 변수를 사용하는 방법

의사 코드 :

// define a cursor that loops through all columns in "MyTable" 
Define cursor C1 for (select COLS from SYSCAT.TABLES where TABS="MyTable") 
FOR 
// take the next column from the cursor 
@temp_var = C1.COLS 
// DELETED and INSERTED are tables that also contain the same columns as "MyTable" table. 
if([email protected]_var <> [email protected]_var) 
THEN 
... 

if([email protected]_var <> ... 작동,하지만 어쩌면 당신이 볼 수 없습니다 물론 않습니다 위의 문은 내가 뭘하려고? 그래서 나는 그것을 런타임 동안 예를 들어 싶습니다. if(DELETED.MyColumn <>... where "MyColumn""MyTable"의 열이고 INSERTEDDELETED columns의 열입니다. 이 메소드는 generic해야하기 때문에, 나는 어떤 컬럼이 테이블에 있는지 (사용중인 특정 테이블에 따라) 미리 알지 못한다.

if 문을 동적으로 작성하는 방법에 대한 아이디어가 있습니까?

+0

열 이름이 무엇인지 모르는 경우 트리거를 어떻게 알 수 있습니까? 트리거는 변수를 허용하지 않습니다. CONTEXT_INFO를 사용할 수도 있지만 yuck, yuck, yuck. –

+0

답장을 보내 주셔서 감사합니다! 글쎄, 열 이름을 다르게 지정할 수 있기 때문에 열 이름을 지정할 수는 없지만 커서는 알 수 있습니다. 커서는 "COLS"에 모든 테이블 열 이름을 포함합니다. 그래서 테이블 열을 검색하는 데이 테이블을 사용하려고합니다. – user1340582

+0

나는 당신이 테이블의 모든 칼럼을 루핑하고있는 것을 볼 수있다. 그러나 그것은 여전히 ​​당신의 커서가 어떤 칼럼인지를 알 수있는 방법을 설명하지 못한다. –

답변

0

DB2 SQL에서는 동적으로 열을 참조 할 수 없습니다. 따라서 SQL 만 사용하여 그렇게 할 수는 없습니다. 아마도 트리거 내에서 다른 언어로 작성된 외부 프로 시저를 호출 할 수 있습니다. 또는 당신이하고자하는 일에 대해 전반적인 디자인을 재고 할 수 있습니다. 다른 옵션은 보이지 않습니다.

관련 문제