1

有没有办法在 OpenEdge SQL 中存储会话变量,类似于 Oracle 的RETURNING INTO子句的工作方式?我需要由触发器设置的列值在运行 INSERT 后可用,而无需执行另一个 SELECT。

我正在使用 10.2B。我查看了 SQL 参考和 SQL 开发手册,但没有看到类似的内容。

4

2 回答 2

1

使用 PUBLISH 和 SUBSCRIBE 怎么样?如果您的触发器要发布您想要的值,并且您在调用程序/类/超级过程中的适当位置订阅它,您将获得所需的信息。它不像在 Oracle 中那样干净,但它可能会让你到达你想去的地方。

如果您需要一些代码,我可以提供...但是基于浏览您的其他一些问题和答案,我不希望您需要它:-)

于 2012-06-12T03:57:34.723 回答
0

没有这样的功能,也没有可行的解决方法。

一种不可行的解决方法是构建一个专门用于执行 INSERT(s) 的特殊存储过程,但这不是通用解决方案,因为 INSERT 命令采用可变数量的参数(尤其是要填充哪些列和数据) ,而存储过程必须有固定数量的参数。

如果存在一个 SQL 函数,该函数会返回一个特殊的会话 ID,该会话 ID 对应于客户端与 SQL 引擎的瞬时连接,则可以让客户端和触发器/存储过程使用预先确定的表作为请求队列进行通信(通过使用会话 ID 作为键)。不幸的是,根据文档,没有这样的会话 ID。

我的问题的基本用例是一种在 INSERT 上实现自动递增主键的方法,该方法将向客户端传达插入的 ID,这样我就不必强迫客户端

  • 为 PK 本身提供即时价值
  • 提供与他们正在更新的表相对应的序列

不幸的是,由于缺乏支持,我不得不对客户端施加限制以提供上述任何一个(并且缺少任何一个,代码假定<tablename>_id_seq存在序列)。

于 2012-06-12T18:38:54.783 回答