如何使用SQL填充APEX中的列?

时间:2018-02-22 14:48:47

标签: oracle-apex oracle-apex-5.1

正如问题所述,我想用一个我需要从SQL查询中获取的值来填充主页表的列(在主要详细信息表单中)。假设我有两个关系,其中第一个具有属性name(PK)和类别,第二个具有account_name(PK)和name(第一关系的FK)。

我的主表应显示第一个关系+特殊列,它将显示每个名称的account_names数。到目前为止我所做的是:我添加了一个新列,并将其类型指定为SQL Expression,并在SQL表达式下编写了

    SELECT COUNT(ACCOUNT_NAME)
    FROM ACCOUNTS
    WHERE NAME = :NAME;

其中ACCOUNTS是第二关系。我的解决方案显然不起作用,在谷歌搜索的最后2个小时内,我无法找到适当的解释,无论是正式的还是非正式的。

提前致谢

2 个答案:

答案 0 :(得分:0)

您不需要任何特殊的APEX功能,只需编写带有聚合的SQL查询:

select m.name, m.category, count(a.account_name)
  from master_table m left join accounts a on a.name = m.name
 group by m.name, m.category

够了。

答案 1 :(得分:0)

我不确定我明白你提到的那些“关系”是什么意思。

无论如何:我在master-detail Scott的表上尝试了它(DEPT是master,EMP详细信息),让向导创建一个默认表单。

然后我为DEPT区域创建了一个新列(右键单击DEPT区域下的“Columns”,“Create column”)。我将其命名为CNT_EMP(即它应该显示每个部门有多少员工工作)。

导航至CNT_EMP的“来源”部分; type是“SQL Expression”(就像你做的那样)。如果你看一下它的帮助,你会发现它允许这样一个命令:

(select count(*) from emp e where e.deptno = deptno)

嗯,它不会起作用。首先,Apex发出警告说“ORA-06550:第2行,第1列:ORA-00936:缺少表达式”,但你可以忽略它(你输入的任何表达式引发了一些错误,到目前为止正如我所知道的那样。好像是一个错误),运行页面 - 每个部门都会有14名员工(这是错误的)。

这就是我创建(存储)函数的原因:

create or replace function f_emp_per_dept (par_deptno in number)
  return number
is
  retval number;
begin
  select count(*) into retval
  from emp
  where deptno = par_deptno;

  return (retval);
end;

并在CNT_EMP的SQL表达式中使用它,如

f_emp_per_dept(deptno)

(再次出错,忽略它,保存页面,运行它)。你猜怎么着?它按预期工作,计算每个部门的员工!

因此,我建议你这样做 - 创建一个函数并从item的SQL Expression中调用它。

另一方面,@ Dmitry所说的立场 - 为什么你会这样做,当有一个更简单的解决方案时(看看他的例子)?