正如问题所述,我想用一个我需要从SQL查询中获取的值来填充主页表的列(在主要详细信息表单中)。假设我有两个关系,其中第一个具有属性name
(PK)和类别,第二个具有account_name
(PK)和name
(第一关系的FK)。
我的主表应显示第一个关系+特殊列,它将显示每个名称的account_names数。到目前为止我所做的是:我添加了一个新列,并将其类型指定为SQL Expression
,并在SQL表达式下编写了
SELECT COUNT(ACCOUNT_NAME)
FROM ACCOUNTS
WHERE NAME = :NAME;
其中ACCOUNTS
是第二关系。我的解决方案显然不起作用,在谷歌搜索的最后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所说的立场 - 为什么你会这样做,当有一个更简单的解决方案时(看看他的例子)?