【问题标题】:oracle apex tabular form MRU processoracle apex 表格形式 MRU 流程
【发布时间】:2017-01-05 12:38:54
【问题描述】:

我有一个基于简单 sql 的表格形式,例如

select col1, col2, check_box from view1

用户可以更新表单中的check_box,col1和col2会根据check_box是否被选中来进行操作。然后我创建的 MRU 进程将在 DB 中更新基表。

我遇到的问题是,除了使用 MRU 更新基表之外,我还想根据表单中的 check_box 调用另一个 proc 来做其他事情

例如

if check_box is unchecked, then col1 and col2 will be blanked by the MRU;
if check_box is checked, col1 and col2 will be updated to 'Done' by the MRU,
also a proc should be called to do something else.

我的问题是,我应该坚持使用 MRU 方法(因为 MRU 有其优势,包括丢失更新检测、锁定等......),并创建一个单独的进程来调用 proc,还是应该只创建一个进程两者都可以(比如遍历报告的每一行,更新基表,当 check_box 被选中时,调用 proc)?

什么是更好的方法?

【问题讨论】:

  • 您确定您说的是交互式报告而不是表格形式(可更新的 sql 查询)?
  • 对不起……是的,你是对的,它是一个表格形式。
  • 如果需要为每条更新的记录运行该过程,则将其放在同一个 MRU 进程中。如果每个页面请求只运行一次,那么您可以将它创建为一个单独的进程。
  • 谢谢杰弗里。我想要做的是,对于每个修改的行,我想执行类似 MY_PROCEDURE() 的东西。如何将其放入 MRU 流程中?我的意思是我可以创建一个 MRU 进程,并将范围设置为“仅用于创建和修改的行”,这将更新对数据库所做的任何更改。如何使 MRU 进程也执行单独的 proc?

标签: oracle plsql report oracle-apex


【解决方案1】:

您可以将流程与表格形式相关联。这样做会导致为表格形式的每条记录运行该流程(尽管您可以指定执行范围,以便它将针对每一行或仅针对新的/更新的行运行)。
在此过程中,您可以使用绑定变量语法以表格形式引用每一列。如果该列是可更新的,您也可以更改该值。 您可以有一个在 MRU 之前运行并更改 col1 和 col2 值的进程。

IF :CHECK_COL IS NULL THEN
  :COL1 := NULL;
  :COL2 := NULL;
ELSE
  :COL1 := 'Done';
  :COL2 := 'Done';
END IF;

然后创建一个要在 MRU 之后运行的进程并运行该过程。

MY_PROCEDURE(:SOME_COL);

请记住,如果该过程对由 MRU 更改的记录执行 DML,则运行此过程会导致 MRU 由于丢失更新检测(不匹配校验和)而失败。

【讨论】:

  • Tom,有没有办法指定一个过程或封装过程,以便整个表格形式只运行一次,并且在这个过程中有某种循环来遍历行?跨度>
  • @ThomasTschernich 有 - 虽然我不确定会有什么区别?此处 apex 将为每一行调用该过程(并注意:您可以检查该行的状态(已创建、已更新)),而在您的循环中,您将为...每一行调用该过程?除非你想做一些其他高级的事情?
  • 也许只是行之间存在依赖关系。我现在不能提供一个例子,但以防万一我在未来的某个时间点偶然发现这个。我发现了一些额外的信息here,但那是非常古老的,似乎几乎没有记录。
  • @ThomasTschernich 您链接的信息仍然相关,因此您当然可以从那里构建。 tabform 中的所有项目都映射到apex_application.g_f## 数组之一。如果您需要以这种方式处理它们,您可以遍历它们。更“现代”的版本是使用我提到的表格形式相关的过程。但是这些数组肯定仍然有效。它们也是常见的做法,因为它与使用通过使用 apex_item api 创建的手动选项卡表单的方式相同。
猜你喜欢
  • 1970-01-01
  • 2011-06-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-25
相关资源
最近更新 更多