了解 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 以及如何使用它的主要内容,如果未能解决你的问题,请参考以下文章

Oracle数据库学习1--简介,基本了解

oracle 体系结构怎么样 去理解?

Oracle11g温习-第一章:Oracle 体系架构

了解时间戳 - 1505143211567 (Oracle DB)

了解oracle表单中的记录组是不是为空

oracle 架构和一些工具了解