【问题标题】:How do I use SQL to populate a column in APEX?如何使用 SQL 填充 APEX 中的列?
【发布时间】:2018-02-22 14:48:46
【问题描述】:

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

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

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

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

提前致谢

【问题讨论】:

    标签: oracle-apex oracle-apex-5.1


    【解决方案1】:

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

    无论如何:我在主从 Scott 的表上尝试过(DEPT 是主,EMP 详细),让向导创建一个默认表单。

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

    导航到 CNT_EMP 的“来源”部分; type 是“SQL 表达式”(就像你做的那样)。如果你查看它的帮助,你会发现它允许这样的命令:

    (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)
    

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

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

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

    【讨论】:

      【解决方案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
      

      够了。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-10-14
        • 2012-02-25
        • 1970-01-01
        • 1970-01-01
        • 2014-12-18
        • 1970-01-01
        相关资源
        最近更新 更多