有没有办法在OpenEdge SQL中存储会话变量,类似于Oracle的RETURNING INTO子句的工作方式?我需要一个触发器设置的列值,在运行INSERT后可以使用,而不必再执行另一个SELECT。
我正在使用10.2B。我查看了SQL Reference和SQL Development手册,但没有看到这样的内容。
答案 0 :(得分:1)
如何使用PUBLISH和SUBSCRIBE?如果您的触发器是要发布您想要的值,并且您在调用程序/类/超级过程中的适当位置订阅了它,那么您将获得所需的信息。它不像在Oracle中那样干净,但它可能会让你到达你想要的地方。
如果您需要一些代码,我可以提供它......但基于浏览您的其他一些问题和答案,我不希望您需要它: - )
答案 1 :(得分:0)
没有这样的功能,也没有可行的解决方法。
一个不可行的解决方法是构造一个专门用于执行INSERT的特殊存储过程,但这不是一般解决方案,因为INSERT命令采用可变数量的参数(尤其是哪些列和数据到填充),而存储过程必须有固定数量的参数。
如果存在一个SQL函数,它将返回一个特殊的会话ID,该ID对应于客户端与SQL引擎的瞬时连接,则可以让客户端和触发器/存储过程使用预先确定的表作为请求队列(通过使用会话ID作为密钥)。不幸的是,根据文档,没有这样的会话ID。
我的问题的基本用例是一种在INSERT上实现自动递增主键的方法,它将向客户端传送插入的ID,这样我就不必强迫客户端
不幸的是,由于缺乏支持,我不得不对客户端施加限制以提供上述任何一种(并且缺少,代码假定存在<tablename>_id_seq
序列。)