Stored procedures 从Sybase ASA 6中的触发器内为每个受影响的记录调用存储过程

Stored procedures 从Sybase ASA 6中的触发器内为每个受影响的记录调用存储过程,stored-procedures,triggers,sybase-asa,Stored Procedures,Triggers,Sybase Asa,在旧版本的Sybase上实现触发器时遇到了一些麻烦,想知道是否有人能帮上忙。简而言之,我想编写一个触发器,为每个受影响的记录调用另一个存储过程(无论是插入、删除还是同时[Update]) 在T-SQL(SQL Server)中实现这一点的一种方法是使用游标,但我在web上找到的游标示例似乎没有一个在Sybase ASA 6.0.4上真正起作用-它要么总体上不喜欢T-SQL,要么看起来编译了,但通常什么都不做(即使是病态简单的人为场景) 本质上,我希望循环遍历所有“插入的”表记录(如果有)和每个E

在旧版本的Sybase上实现触发器时遇到了一些麻烦,想知道是否有人能帮上忙。简而言之,我想编写一个触发器,为每个受影响的记录调用另一个存储过程(无论是插入、删除还是同时[Update])

在T-SQL(SQL Server)中实现这一点的一种方法是使用游标,但我在web上找到的游标示例似乎没有一个在Sybase ASA 6.0.4上真正起作用-它要么总体上不喜欢T-SQL,要么看起来编译了,但通常什么都不做(即使是病态简单的人为场景)

本质上,我希望循环遍历所有“插入的”表记录(如果有)和每个Exec MySproc(inserted.keyid),然后循环遍历所有“删除的”表记录(如果有),然后再次循环遍历每个Exec MySproc(deleted.keyid)

有没有人举过这样的例子,或者只是在ASA6中使用只读游标?在线手册似乎有一个简单光标的例子,但在实践中,我无法使这个例子真正起作用。我可以将另一个存储过程展开到触发器中(其实并没有那么复杂),但它太复杂了,无法作为“select from inserted…”类型语句的一部分来完成—它本身就是几行代码。因此我认为我无论如何都需要一个光标


编辑:(29/12/09)-我最终在绝望中展开了存储过程代码,但我真的希望在Sybase ASA 6中有一个可用的游标示例,因为迟早我会遇到一些无法轻松展开的问题。所以我会把这个作为赏金扔掉-有人能给我一个有效的例子吗?:-)

听起来像是在寻找行级触发器

默认情况下,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

为什么不将逻辑合并到您的insert存储过程中,以便在insert语句后调用您尝试实现的存储过程?@OMG Ponies-不幸的是,我无法控制更改表的所有方法(此数据库和我的数据库还涉及其他应用程序)。我们希望使用触发器来确保无论表如何更改,存储过程始终会被调用,并保持系统的各种其他位“最新”。到目前为止,他们一直在一天结束时手动运行作业,但他们想要更“实时”一点的东西如果在运行时运行这些数据库,则数据库的性能最好。在触发器中使用游标也不是您想要的。如果我们的一些开发人员或数据库管理员想要使用游标创建触发器,init将被回调,因为我们不允许在触发器中使用游标。它会导致很多延迟。为什么不显示不起作用的代码并解释它运行时发生了什么?也许有人能指出错误。除此之外,我怀疑很多人(如果有人)会尝试从头开始为您编写Sybase ASA 6.0.4游标循环。我没有任何不起作用的代码,因此-更重要的是,我在web上找到的每个示例在ASA6上都不起作用。我不知道是不是我(可能是!),但从根本上说,代码示例甚至不“编译”。我将返回并挖掘一些示例/链接(来自Sybase的网站)并进一步说明。我不是要求任何人来解决我的问题(我现在还没有)-我只是想找一个在这个版本的ASA中做过光标的人,他可以给我显示正确的咒语,让我编译。:-)谢谢Gabriel-我还没有意识到我可以编写行级触发器而不是语句级触发器。我更熟悉行级别的工作(从Interbase 6触发器),我很高兴我可以使用这种技术来避免游标。你得到了赏金;您的建议已经在我的数据库中发挥了作用,我很高兴在将来使用这种方法。非常感谢!