了解 Oracle Apex_Application.G_Fnn 以及如何使用它
Posted
技术标签:
【中文标题】了解 Oracle Apex_Application.G_Fnn 以及如何使用它【英文标题】:Understanding Oracle Apex_Application.G_Fnn and how to use it 【发布时间】:2012-08-21 22:48:57 【问题描述】:我对 Oracle apex_application.gfnn 的工作方式以及它是仅适用于 Oracle ApEx 中的标准 SQL 报告还是仅适用于 SQL(可更新报告,即表格形式)感到非常困惑。
基本上,我正在尝试使用此示例 SQL 实现以下目标,这只是一个标准 SQL 报告,但我不确定我想要实现的目标是否可以通过这种类型或报告实现,即:
select id,
name,
telephone,
apex_item.checkbox2(10,id) as "Tick when Contacted",
apex_item.text(20,my_date) as "Date Contacted",
apex_item.textarea(30,my_comment,5,80) as "Comment"
from my_table
基于上面的 SQL,假设这个 SQL 查询返回 10 行。现在使用复选框作为我的驾驶 ID,我勾选了所有奇数记录/行的复选框,即第 1、3、5、7、9 行,对于这些行中的每一行,我还输入了一个日期值 (f20) 和注释(f30)
牢记这一点,然后我想创建一个页面进程,当用户按下“保存”按钮时调用该进程,它将遍历这些检查的行并存储每条记录、我的日期和我的评论,但仅适用于我选择的行。
因此,根据上述情况,我希望我的表中有 5 个新闻行,其中包含以下列:
ID MY_DATE MY_COMMENT
1 26/08/2012 Comment A
3 27/08/2012 Comment B
5 28/08/2012 Comment C
7 29/08/2012 Comment D
9 30/08/2012 Comment E
很遗憾,我不确定如何使用apex_application.G_F10.COUNT
来实现这一点。
对于勾选复选框的每一行,我希望能够访问每个数组元素 (f20) 和 f(f30) 的内容。
这是可能的还是我误解了 apex_application.G_Fnn 的工作原理?如果这是不可能的,我怎么能做到这一点?我需要表格报告吗?
【问题讨论】:
扁桃体,你的新问题***.com/q/12163564/814048 让我意识到我在代码中犯了一个非常愚蠢的错误。我修改了我的答案。对此感到抱歉。 嗨,汤姆-没问题。感谢您修改了答案,现在也更清楚了。当我需要再次使用复选框场景时,我会记住这一点。顺便说一句,这个修改后的答案是否与表格 SQL 可更新 SQL 报告或仅与标准报告有关? 取决于你对标准报告的意思!对于表格形式:肯定是的,因为这是我们在这里使用的那种。 【参考方案1】:你很亲密。
select apex_item.checkbox2(10, empno) select_me,
apex_item.text(20, empno) empno,
apex_item.text(30, ename)||apex_item.hidden(50, empno) ename
from emp
我正在连接隐藏的项目,因为我不希望它在自己的列中。布局混乱。 此外,由于复选框的工作方式,隐藏项目在那里。复选框只为选中的项目提交它们的值。这意味着数组 10 有 3 个值。其他数组仍将包含所有行的值。 这就是我再次添加隐藏 empno 的原因:这样我们就可以将选中的值与其他行匹配。
关于提交过程:
DECLARE
v_empno emp.empno%TYPE;
v_ename emp.ename%TYPE;
BEGIN
--f10: checkbox
--f20: empno
--f30: ename
--f50: empno again
for i in 1..apex_application.g_f10.count
loop
for j in 1..apex_application.g_f50.count loop
if apex_application.g_f10(i) = apex_application.g_f50(j)
then
-- access values for the selected rows in the other arrays
v_empno := apex_application.g_f20(j);
v_ename := apex_application.g_f30(j);
apex_debug_message.log_message('Employee: '||v_empno||' - '||v_ename);
end if;
end loop;
end loop;
END;
运行页面,启用调试,选择记录 2、4 和 6,提交。
调试输出:
您现在需要做的就是将您的处理置于该循环中。
【讨论】:
再次感谢汤姆,但只是想确认一些事情,可能会在工作中抛出一个扳手,但关于 f20 和 f30,假设 f20 是用户实际输入的日期字段,而不是来自数据库表列,以及 f30,它是一个文本区域字段,用户可以在其中输入评论,并且再次不是来自数据库表列。您的处理是否仍然适用于这种情况或是否需要更改? 这取决于您的实际意思:如果您打算使用用于标准表格形式的标准多行处理:您不能。此外,对于手动表格形式,您不能进行表格形式验证(在验证处理点中声明的)。您也不会获得校验和和最佳锁定,这在具有并发用户的系统中很重要。 哦,嘿,您可以使用 apex_item.date_popup2 作为日期字段! 那么汤姆,根据您所说的,对于手动输入的 f20 和 f30 字段,您将如何做我所追求的?您会使用 apex_collection 来存储这些字段还是其他方式?谢谢。 这当然取决于您的规格,您可以做什么和可以做什么,或者有一些回旋余地。如果你继续这门课程,你需要为这些字段编写验证,这是没有办法的。不过,约会可能会很痛苦。使用日期选择器可能会有所缓解,但您仍然需要在某处执行 TO_DATE 并处理错误并输出它们。文本区域也是如此。我建议在单独的过程中处理这些,而不是您的实际更新。发生验证错误时中止处理。以上是关于了解 Oracle Apex_Application.G_Fnn 以及如何使用它的主要内容,如果未能解决你的问题,请参考以下文章