【发布时间】:2009-12-21 06:53:58
【问题描述】:
只是在旧版本的 Sybase 的触发器中实现某些东西时有些头疼,想知道是否有人可以提供帮助。简而言之,我想编写一个触发器,它将为每个受影响的记录调用另一个存储过程(无论是插入、删除还是两者都[更新])。
在 T-SQL (SQL Server) 中执行此操作的一种方法是使用游标,但我在网上找到的所有游标示例似乎都不能在 Sybase ASA 6.0.4 上运行——它要么不喜欢一般的 T-SQL 或者它似乎可以编译,但通常什么都不做(即使是病态的简单、人为的场景)。
基本上我想遍历所有“插入”表记录(如果有的话)和每一个 Exec MySproc (inserted.keyid),然后遍历所有“已删除”表记录(如果有),并再次为每一个 Exec MySproc (deleted.keyid)。
有没有人做这种事情的例子,甚至只是在 ASA 6 中使用只读光标?在线手册似乎有一个简单光标的示例,但实际上我无法使该示例真正起作用。我可以将另一个存储过程展开到触发器中(实际上并没有那么复杂),但是作为“从插入的选择...”类型语句的一部分来完成它太复杂了 - 它确实是一些它自己的代码行。因此我认为无论如何我都需要一个光标。
编辑:(29/12/09) - 我绝望地最终展开了 sproc 代码,但我真的很想在 Sybase ASA 6 中有一个工作游标示例,因为迟早我将面临一些我无法轻易展开的事情。 所以我会抛出这个赏金 - 有人可以给我一个可行的例子吗? :-)
【问题讨论】:
-
为什么不将逻辑合并到您的插入存储过程中,以便在 INSERT 语句之后调用您尝试实现的存储过程?
-
@OMG Ponies - 不幸的是,我无法控制可以更改表的所有方法(该数据库以及我的数据库都涉及其他应用程序)。我们希望使用触发器来确保无论表如何更改,存储过程都将始终被调用并保持系统的各种其他位“最新”。到目前为止,他们一直在一天结束时手动运行作业,但他们想要一些更“实时”的东西。 :-)
-
如果您在运行时运行这些数据库,则数据库最多不会执行。在触发器中使用游标也不是你想要的。如果我们的一些开发人员或 dba'ers 想要使用游标创建触发器,init 将被回调,因为我们不允许在触发器中使用游标。这会导致很多延迟。
-
为什么不显示不起作用的代码并解释它运行时发生了什么?有人可能会指出错误。除此之外,我怀疑很多人(如果有的话)会尝试为您从头开始编写 Sybase ASA 6.0.4 游标循环。
-
嗨,KM。我没有任何不起作用的代码,因此 - 更重要的是,我在网上找到的每个示例都无法在 ASA 6 上运行。我不知道是不是我(可能是!)但从根本上说,代码示例甚至都不会“编译”。我将返回并挖掘一些示例/链接(来自 Sybase 的网站)并进一步说明。我没有要求任何人解决我的问题(我现在真的没有) - 我只是想找一个在这个版本的 ASA 中做过游标的人,他可以向我展示正确的咒语以使其编译. :-)
标签: stored-procedures triggers sybase-asa