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

时间:2016-09-23 09:59:10

标签: plsql oracle-apex-5

我有一个表格,其中包含从外部程序中收集的值。

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

在Apex上,我有一个表格形式,其中包含另一个表中的选择列表,允许用户更新状态字段。该表如下:

  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应该处于非活动状态,然后从下拉列表等中选择取消激活所有相关名称。

现在我遇到的问题是从外部发送到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并单击按钮,它应该发送:   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;

1 个答案:

答案 0 :(得分:0)

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

我对您的设置做了一些假设,因为它不是100%明确的。如果它不是一直匹配它不应该太重要 - 以它为例。

使用的查询:

SELECT name, state_id 
FROM states

因此:

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

在验证后创建一个提交过程。确保将该过程与表格形式相关联。将范围设置为&#39;所有创建和修改的行&#39;。
这样做将允许您编写PLSQL,它将在表格形式的每个符合条件的行的范围内执行。您可以使用绑定变量语法来引用提交其状态的列(例如,文本字段,隐藏项,选择列表,复选框)。
注意&#34;所有行&#34;有效地表示当前分页中已提交的那些行&#34;。

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

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

您可以在绑定变量语法中引用实际的列名(标题)。关键点是该过程必须与表格形式相关联!

(如果你没有真正的&#34;真实的表格形式,你应该指出这一点,这就是我要求提供源SQL的原因。这个信息非常重要在帖子中找到了很多其他信息!)