0

只是在旧版本的 Sybase 的触发器中实现某些东西有些头疼,想知道是否有人可以提供帮助。简而言之,我想编写一个触发器,它将为每个受影响的记录调用另一个存储过程(无论是插入、删除还是两者都[更新])。

在 T-SQL (SQL Server) 中执行此操作的一种方法是使用游标,但我在网上找到的游标示例似乎都不能在 Sybase ASA 6.0.4 上运行——它要么不喜欢 T-SQL一般来说,或者它似乎可以编译,但通常什么都不做(即使是病态简单、人为的场景)。

本质上,我想遍历所有“插入”表记录(如果有)和每个Exec MySproc (inserted.keyid),然后遍历所有“已删除”表记录(如果有),然后再为每个一个Exec MySproc (deleted.keyid)

有没有人有做这种事情的例子,甚至只是在 ASA 6 中使用只读光标?在线手册似乎有一个简单光标的示例,但实际上我无法使该示例真正起作用。我可以将另一个 sproc 展开到触发器中(实际上并没有那么复杂),但是作为“从插入的选择...”类型语句的一部分来完成它太复杂了——它本身就是几行代码. 因此,我认为无论如何我都需要一个光标。

编辑:(29/12/09)-我绝望地最终展开了存储过程代码,但我真的很想在 Sybase ASA 6 中有一个工作游标示例,因为迟早我会遇到一些我可以' t 轻松展开。所以我会抛出这个赏金 -有人可以给我一个工作的例子吗?:-)

4

1 回答 1

1

听起来您正在寻找 ROW LEVEL 触发器。

默认情况下,ASA 中的触发器是语句级别的(触发器在整个触发语句完成后执行一次)。另一方面,行级触发器对更改的每一行执行一次。

以下是行级触发器的示例:

CREATE TRIGGER tr_log
AFTER UPDATE OF "myfield"
ON mytable
REFERENCING OLD AS old_data NEW AS new_data

FOR EACH ROW

BEGIN
    Insert into Narc_USER_INFO_Change (Field_Changed, New_Value, Original_Value, user)
    Values('myfield', new_data.myfield,  old_data.myfield, CURRENT USER);
END
于 2010-01-02T18:15:03.510 回答