0

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

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

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

  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;
4

1 回答 1

0

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

我正在对您的设置做出一些假设,因为它不是 100% 清楚的。如果它不完全匹配,则无关紧要-将其视为示例。

使用的查询:

SELECT name, state_id 
FROM states

借此:

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

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

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

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

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

(如果你没有真正的“真实”表格形式,你应该指出这一点,这就是我要求源 SQL 的原因。这个信息比在邮政!)

于 2016-09-26T19:43:38.377 回答