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