OpenEdge SQL:'变量'功能类似于Oracle PL / SQL“RETURNING INTO”?

时间:2012-04-02 15:42:48

标签: progress-4gl

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

我正在使用10.2B。我查看了SQL Reference和SQL Development手册,但没有看到这样的内容。

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

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

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

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

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

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

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