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

How do I use SQL to populate a column in APEX?

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

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

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

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

提前致谢

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

够了。

我不确定我是否理解你提到的 "relation" 是什么意思。

无论如何:我在 master-detail Scott 的表上试过了(DEPT 是主控,EMP 是细节),让向导创建默认表单。

然后我为DEPT区域创建了一个新的列(right-click "Columns"在DEPT区域下,"Create column")。我将其命名为 CNT_EMP(即它应该显示每个部门有多少员工)。

导航至 CNT_EMP 的 "Source" 部分; type 是 "SQL Expression" (就像你做的那样)。如果您查看它的帮助,您会看到它允许这样的命令:

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

好吧,这行不通。首先,Apex 发出警告说 "ORA-06550: line 2, column 1: ORA-00936: missing expression" 但你可以忽略它(据我所知,你输入的 任何 表达式都会引发一些错误。就好像它是一个错误),运行 页面 - 每个部门都有 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 所说的是有道理的 - 既然有更简单的解决方案(请看他的示例),您为什么要这样做?