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"
의 열이고 INSERTED
및 DELETED columns
의 열입니다. 이 메소드는 generic해야하기 때문에, 나는 어떤 컬럼이 테이블에 있는지 (사용중인 특정 테이블에 따라) 미리 알지 못한다.
if 문을 동적으로 작성하는 방법에 대한 아이디어가 있습니까?
열 이름이 무엇인지 모르는 경우 트리거를 어떻게 알 수 있습니까? 트리거는 변수를 허용하지 않습니다. CONTEXT_INFO를 사용할 수도 있지만 yuck, yuck, yuck. –
답장을 보내 주셔서 감사합니다! 글쎄, 열 이름을 다르게 지정할 수 있기 때문에 열 이름을 지정할 수는 없지만 커서는 알 수 있습니다. 커서는 "COLS"에 모든 테이블 열 이름을 포함합니다. 그래서 테이블 열을 검색하는 데이 테이블을 사용하려고합니다. – user1340582
나는 당신이 테이블의 모든 칼럼을 루핑하고있는 것을 볼 수있다. 그러나 그것은 여전히 당신의 커서가 어떤 칼럼인지를 알 수있는 방법을 설명하지 못한다. –