无法在 Oracle apex 中使用匿名块更新字段

Posted

技术标签:

【中文标题】无法在 Oracle apex 中使用匿名块更新字段【英文标题】:Unable to update fields using anonymous block in Oracle apex 【发布时间】:2019-06-12 14:04:15 【问题描述】:

我的 Apex 应用程序中有 2 个页面,第 1 页和第 2 页。

在 Page1- 我有 2 个字段,我只是保存,以便我可以在 Page2 中使用它来完全插入表中,主键是我创建的序列。

在第2页:主键被隐藏(序列),

我有一个保存按钮,我在该按钮上编写了一个匿名块(动态操作--> 执行 PLSQL 代码)以插入到包含第 1 页和第 2 页详细信息的表中,它成功并且没有问题。

但问题在于更新按钮。

我再次使用匿名块(动态操作--> 执行 PLSQL 代码)来更新页面上的详细信息2。但是数据库中的记录没有更新。

我正在使用的加入条件

Id=:P6_PRIMARY_KEY(:P6_PRIMARY_KEY 为隐藏字段,Id 为带序列的数据库字段)

我认为我无法在 where 条件下获取 Id。

不确定我是否遗漏了什么。

我已经使用类似的匿名块插入到数据库中,并且每次单击“保存”按钮时它运行良好并创建记录。

我也在为更新按钮做同样的事情。它也不会更新而没有错误。

我的主键是一个序列。我认为它没有保持主键的值。我可能需要在我的 where 条件下改变一些东西。

【问题讨论】:

根据我的经验,保存或更新页面中“刚插入”项目的数据往往会很麻烦,因为这些值不在会话中,除非您使用的是提交页面功能按钮。您可以尝试检查会话值选项卡(页面底部的开发人员)中的值,然后查看您的数据是否真的是您输入的内容。 【参考方案1】:

取消隐藏P6_PRIMARY_KEY,以便您查看其中的内容。也许您每次都在获取一个新的序列号 - 难怪 join 不起作用。如果是这种情况,请调整执行此操作的流程,方法是应用 IF,例如

if :P6_PRIMARY_KEY is null then
   :P6_PRIMARY_KEY := seq_name.nextval;
end if;

或通过设置过程的条件,例如项目为空(当然是哪个?P6_PRIMARY_KEY)。

另外,启用调试、运行页面、执行更新然后查看调试结果。它将显示所有项目的值,执行的代码,因此它可能有助于找到罪魁祸首。

【讨论】:

它现在对我有用,在我的更新按钮(用于更新值的 PLSQL 代码)中,我只是在更新语句返回 id INTO :P^_PRIMARY_KEY 之后将其用于隐藏值,它实际上获取了数据库中的值到会话中,我现在可以插入特定记录。 不错;我很高兴你修好了。感谢您告知我们。

以上是关于无法在 Oracle apex 中使用匿名块更新字段的主要内容,如果未能解决你的问题,请参考以下文章

无法在 Oracle 匿名块中调用和执行 .sql 脚本文件

如何在 oracle apex 中将 Content-Type=application/xml 用于 pl/sql 块

在 Oracle APEX 交互式报表中更新与过滤器相关的页面项目

如何在Oracle Apex交互式报表的行中添加更新按钮?

Oracle Apex - 如何使用动态操作更新更改操作的值列表?

Apex Oracle - 多个动态操作