Table 中发生更改的所有值的数组 (Oracle Apex)

Array of all values from Table where changes occured (Oracle Apex)

我有一个 table,其值是从外部程序收集的。

  Name | State
  Dan  | Active
  Stan | Active
  Maggy| Inactive

在 Apex 上,我有一个表格形式,其中包含来自另一个 Table 的 select 列表,它允许用户更新状态字段。这个table如下:

  STATE_ID  | STATE_NAME
  Activate  | Active
  Deactivate| Inactive

在 LOV 中使用 PL/SQL 查询来调用此字段。然后它将切换选项并显示为:

  Name | State    |Set_state
  Dan  | Active   | Activate / Deactivate (in dropdown LOV)
  Stan | Active   | Activate / Deactivate (in dropdown LOV)
  Maggy| Inactive | Activate / Deactivate (in dropdown LOV)

这意味着用户可以决定 Dan 应该处于非活动状态,然后 select 从下拉列表等中停用所有相关名称。

现在我遇到的问题是从外部发送到 Perl 脚本的过程在 Oracle 之外做各种事情。因此,我需要创建一个进程,它将获取所有名称和 'Set_State' 并将其以数组或列表形式作为数组或文件发送到外部脚本。

这是我最初所做的,但显然不起作用,因为 :P1_NAME 和 :SET_STATE 是列的名称而不是实际值。希望我说得有道理 :)

  DECLARE
  set_state VARCHAR2(20);
  name VARCHAR2(20);

  BEGIN

  name := :P1_NAME;
  set_state := :SET_STATE;

  mytask := 'Change_state';
  PROC(name, set_state);                < This sends Name, Set_state to below procdure
  END;

请有人帮我获取最后一个查询,使其在单击“提交”按钮时包含 P1_NAME 和 SET_STATE 列中的所有值,而不仅仅是列的名称。数组或列表形式。

所以一旦我将 STAN 更改为 Inactive 并将 Maggy 更改为 Active 并单击按钮,它应该发送: 斯坦不活跃 活跃的玛吉

到外部程序。

这是调用Perl脚本的程序。与问题无关,但无论如何都要粘贴。

  create or replace PROCEDURE "PROC" (name IN VARCHAR2, set_state IN VARCHAR2) IS

  BEGIN

  DECLARE

  BEGIN
  mytask := 'PROC';
  myscriptname := 'Script';
  dbms_scheduler.create_job(
  job_name      => myscriptname
  , job_type      => 'EXECUTABLE'
  , job_action    => '/app/proc.pl'
  , number_of_arguments => 2
  , enabled => FALSE);
  dbms_scheduler.set_job_argument_value(myscriptname,1,name);
  dbms_scheduler.set_job_argument_value(myscriptname,2,set_state);
  dbms_scheduler.enable(myscriptname);
  end;
  END;

使用标准表格形式(可更新 SQL 查询)- 不是包含 apex.item API 调用的经典报告。

我对您的设置做了一些假设,因为它不是 100% 清楚。如果它不完全匹配也没关系 - 把它当作一个例子。

使用的查询:

SELECT name, state_id 
FROM states

由此:

  • NAME:文本字段,或仅在启用保存状态时显示
  • STATE_ID栏:select列表,以及您使用的LOV

在验证后创建一个 on-submit 流程。确保将流程与表格形式相关联。将范围设置为 'all created and modified rows'.
这样做将允许您编写 PLSQL,它将在表格形式的每个符合条件的行的范围内执行。您可以使用绑定变量语法来引用提交其状态的列(例如文本字段、隐藏项、select 列表、复选框)。
请注意 "all rows" 实际上意味着 "those rows in the current pagination which has been submitted".

在这种情况下,我可以使用下面的 PLSQL 对已更改的每一行执行该过程。

BEGIN
  PROC(name => :NAME, set_state => :STATE_ID);
END;

您可以参考绑定变量语法中的实际列名 (headers)。关键是流程必须关联表格形式!

(如果你没有实际的 "real" 表格,你应该指出这一点,这就是为什么我要来源 SQL。这个信息比 post!)

中的许多其他信息重要得多