Oracle apex 如何使用SQL在APEX中填充列?

Oracle apex 如何使用SQL在APEX中填充列?,oracle-apex,oracle-apex-5.1,Oracle Apex,Oracle Apex 5.1,如问题所述,我想用我需要从SQL查询中获取的值填充母版页表的一列(在主详细信息表单中)。假设我有两个关系,第一个有属性name(PK)和category,第二个有account\u name(PK)和name(FK表示第一个关系) 我的主表应显示第一个关系+特殊列,该列将显示每个名称的帐户名称数。到目前为止,我所做的是:我添加了一个新列,并将其类型指定为SQL Expression,在我编写的SQL Expression下面 SELECT COUNT(ACCOUNT_NAME)

如问题所述,我想用我需要从SQL查询中获取的值填充母版页表的一列(在主详细信息表单中)。假设我有两个关系,第一个有属性
name
(PK)和category,第二个有
account\u name
(PK)和
name
(FK表示第一个关系)

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

    SELECT COUNT(ACCOUNT_NAME)
    FROM ACCOUNTS
    WHERE NAME = :NAME;
其中,
科目
是第二个关系。我的解决方案显然不起作用,在谷歌搜索的最后两个小时里,无论是官方的还是非官方的,我都找不到合适的解释


提前感谢

您不需要任何特殊的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

够了。

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

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

然后我为部门区域创建了一个新列(右键单击部门区域“创建列”下的“列”)。我把它命名为CNT_EMP(也就是说,它应该显示每个部门有多少员工)

导航至CNT_EMP的“来源”部分;类型是“SQL表达式”(就像您所做的那样)。如果查看帮助,您将看到它允许这样一个命令:

(select count(*) from emp e where e.deptno = deptno)
好吧,这行不通。首先,Apex提出了一个警告:“ORA-06550:第2行,第1列:ORA-00936:缺少表达式”,但您可以忽略它(据我所知,您输入的任何表达式都会引发一些错误。就好像这是一个bug),运行该页面-每个部门都会有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)
(再次出错,忽略它,保存页面,运行它)。你猜怎么着?它按预期工作,按部门统计员工

因此,我建议您也这样做——创建一个函数并从项的SQL表达式调用它

另一方面,@Dmitry所说的话是站得住脚的——既然有一个简单得多的解决方案(看看他的例子),你为什么要这样做