2012-08-07 3 views
0

Я создаю верхний триггер. У меня есть ситуация, когда мне нужно проверить условие на столбце таблицы, не зная, каково точное имя столбца. Триггер является общим и может применяться к любой таблице с различными столбцами.Как использовать динамическую переменную в операторе 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. Обратите внимание, что, поскольку этот метод должен быть общим, я заранее не знаю, какие столбцы имеют таблица (зависит от конкретной используемой таблицы).

Любые идеи о том, как динамически строить if-statement?

+0

Если вы не знаете, что такое имя столбца, как вы ожидаете, что триггер узнает? Триггеры не принимают переменные. Вы можете использовать CONTEXT_INFO, но yuck, yuck, yuck. –

+0

спасибо за ваш ответ Аарон! Ну, я не могу указать имена столбцов, потому что они будут разными для разных столбцов, но курсор знает. Курсор содержит в «COLS» все имена столбцов таблицы. Вот почему я пытаюсь использовать его для извлечения столбцов таблицы. – user1340582

+0

Я вижу, что вы перебираете все столбцы в таблице, но это все еще не объясняет, как ваш курсор будет знать, какой из них является. –

ответ

0

В DB2 SQL вы не можете динамически ссылаться на столбцы. Таким образом, вы не сможете это сделать, используя только SQL. Вы можете вызвать внешнюю процедуру, написанную на другом языке, из триггера. Или вы могли бы переосмыслить свой общий дизайн за то, что вы пытаетесь сделать. Я не вижу других вариантов.

Смежные вопросы