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!)
中的许多其他信息重要得多
我有一个 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!)
中的许多其他信息重要得多