了解Oracle Apex_Application.G_Fnn以及如何使用它

ton*_*nyf 8 sql oracle11g oracle-apex

我对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
Run Code Online (Sandbox Code Playgroud)

基于上面的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
Run Code Online (Sandbox Code Playgroud)

不幸的是,我不确定如何使用它apex_application.G_F10.COUNT.

我希望能够为每个勾选复选框的行访问每个数组元素(f20)和f(f30)的内​​容.

这是可能的还是我误解了apex_application.G_Fnn是如何工作的?如果这不可能,我怎么能做到这一点?我需要表格报告吗?

Tom*_*Tom 9

你很近.

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
Run Code Online (Sandbox Code Playgroud)

我正在连接隐藏的项目,因为我不希望它在自己的列中.与布局混合.
此外,由于复选框的工作方式,隐藏项目在那里.复选框仅提交已检查项目的值.这意味着阵列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;
Run Code Online (Sandbox Code Playgroud)

运行页面,启用调试,选择记录2,4和6,提交.

记录选择和查询输出

调试输出:

调试输出:BLAKE,JONES,FORD

您现在需要做的就是将您的处理放在该循环中.