0

我正在创建一个更新触发器。我有一种情况,我需要在表列上测试条件,但实际上并不知道确切的列名是什么。触发器是通用的,可以应用于具有不同列的任何表。

伪代码:

// 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(DELETED.@temp_var <> INSERTED.@temp_var)
THEN
...

上面的语句if(DELETED.@temp_var <> ...当然不起作用,但也许你可以看到我在做什么?所以我希望它在运行时出现,例如是if(DELETED.MyColumn <>... where "MyColumn"一个列 in"MyTable"和 in 。请注意,由于此方法应该是通用的,因此我事先不知道该表有哪些列(取决于使用的特定表)。INSERTEDDELETED columns

关于如何动态构建 if 语句的任何想法?

4

1 回答 1

0

在 DB2 SQL 中,您不能动态地引用列。因此,您将无法仅使用 SQL 来做到这一点。您可以从触发器中调用以另一种语言编写的外部过程。或者,您可以重新考虑您想要做的事情的整体设计。我没有看到任何其他选择。

于 2012-08-10T09:40:57.113 回答