如何使用 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 所说的是有道理的 - 既然有更简单的解决方案(请看他的示例),您为什么要这样做?
如问题所述,我想用我需要从 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 所说的是有道理的 - 既然有更简单的解决方案(请看他的示例),您为什么要这样做?