Oracle11g 使用基于数据库视图i.c.的图层时,Geoserver WFS-T插入错误(ORA-22816),带有ID和x27的序列号;s

Oracle11g 使用基于数据库视图i.c.的图层时,Geoserver WFS-T插入错误(ORA-22816),带有ID和x27的序列号;s,oracle11g,geoserver,Oracle11g,Geoserver,我们正在开发一个前端应用程序,它将新数据添加到GeoServer的层中。前端正在使用WFS-T Insert调用添加此数据。我们在GeoServer中使用这些层的视图来执行一些额外的处理。我们使用的视图是在Oracle数据库本身上创建的数据库视图(例如,我们不使用GeoServer的SQL视图)。这些基于视图的层工作正常(解决方案应用了禁用的视图“主键”,如internet上其他地方所述) 我们使用的视图包含一个唯一ID,它是视图中使用的“主体”表的唯一ID。对于“principal”表ID的唯

我们正在开发一个前端应用程序,它将新数据添加到GeoServer的层中。前端正在使用WFS-T Insert调用添加此数据。我们在GeoServer中使用这些层的视图来执行一些额外的处理。我们使用的视图是在Oracle数据库本身上创建的数据库视图(例如,我们不使用GeoServer的SQL视图)。这些基于视图的层工作正常(解决方案应用了禁用的视图“主键”,如internet上其他地方所述)

我们使用的视图包含一个唯一ID,它是视图中使用的“主体”表的唯一ID。对于“principal”表ID的唯一创建,我们选择通过Oracle中定义的序列创建此ID。要在GeoServer中使用此序列,您可以提供文档中所示的“元数据”:

除了在数据库视图上使用(插入)触发器外,此解决方案工作正常

创建或替换触发我们的视图 而不是在vw_视图上插入、更新或删除 对于每一行

如果执行WFS-T insert调用,将导致以下异常:

org.geoserver.wfs.WFSTransactionException:执行插入时出错: 插入功能时出错执行插入时出错:插入时出错 插入功能ORA-22816时出现功能错误:不支持的功能具有 返回条款

在不指示GeoServer使用序列的情况下,我们返回了一个要素ID,它与表ID上的序列编号不一致(GeoServer只返回表的行数加一)。这会导致一种不希望出现的情况,即在WFS-T插入后,前端的ID不正确,只有在刷新浏览器后才能获取正确的ID


是否有人知道是否有办法做到这一点,例如,我们的客户自己更改GeoServer代码,从而创建我们自己的GeoServer版本是没有选择的。停止使用视图将意味着来自前端应用程序的额外WFS-T insert调用。

GeoServer正在报告Oracle错误,在GeoServer中尝试之前,您需要修复该触发器,使其在正常插入上工作。感谢Ian,为确保它不是触发器,我们已使用“无害”触发器进行了尝试。