【问题标题】:Optimize PLSQL Cursor Oracle Apex优化 PLSQL 游标 Oracle Apex
【发布时间】:2020-10-08 03:25:23
【问题描述】:

我正在通过将 html 嵌入 PLSQL 来制作 HTML 报告。我已经通过 2 个游标和嵌套循环完成了这项工作,但我想对其进行优化。我的 Oracle Apex 报告正在生成此输出

ACCOUNTING - NEW YORK
King - President
Clark - Manager
Miller - Clerk
RESEARCH - DALLAS
Jones - Manager
Scott - Analyst
Ford - Analyst
Smith - Clerk
Adams - Clerk
SALES - CHICAGO
Blake - Manager
Allen - Salesman
Ward - Salesman
Martin - Salesman
Turner - Salesman
James - Clerk
OPERATIONS - BOSTON
No Employee

我的代码是

    declare
Cursor c_dept Is Select d.Deptno,d.Dname,d.Loc
      From  eba_demo_load_dept d;

   Cursor c_Emp(v_Deptno Number) Is Select e.Empno,e.Ename,e.Job
      From   eba_demo_load_emp e
      Where  e.Deptno = v_Deptno;
begin

 For i In c_Dept Loop

      Htp.p('<ul>');
      Htp.p('<h4>' || i.Dname ||' - '||i.loc||'</h4>');
      --
      For j In c_Emp(i.Deptno) Loop
        Htp.p('<li>' || initcap(j.Ename) || ' - ' ||initcap(j.job)||'</li>');       
      End Loop;
    Htp.p('</ul>');    
   End Loop;

  Htp.p('<p>No Employee </p>');

end;

我想优化它。是否可以在一个循环中通过游标变量中的内部连接实现相同的输出。如果是,请帮忙。

【问题讨论】:

    标签: oracle plsql oracle-apex cursors


    【解决方案1】:

    我想说嵌套游标循环 - 在这种情况下 - 做了它应该做的事情。由于 HTML 标签不同,我认为其他解决方案不会让它变得更好。可能稍微难以阅读和理解。就现在的情况而言,您正在做什么以及您期望的结果是完全清楚的。

    但是,为什么你这样做有什么特别的原因吗? Apex 提供交互式和经典报告,只需单击几下即可轻松完成。我建议您使用其中之一而不是您自己的代码。

    【讨论】:

    • 是的,你是对的,但我需要构建复杂的界面,如个人资料详细信息或一些基于卡片的复杂报告。所以需要使用 HTML/CSS。
    【解决方案2】:

    您可以通过如下组合查询来使用单个游标:

    declare
    Cursor c_dept Is 
    Select d.Deptno,d.Dname,d.Loc,,
               Listagg('<li>' || initcap(j.Ename) || ' - ' ||initcap(j.job)||'</li>', chr(10))
                 Within group (order by 1) as emps
          From eba_demo_load_dept d
          Join eba_demo_load_emp e
          On e.Deptno = d.Deptno
          Group by d.Deptno,d.Dname,d.Loc;
    
    begin
    
     For i In c_Dept Loop
    
          Htp.p('<ul>');
          Htp.p('<h4>' || i.Dname ||' - '||i.loc||'</h4>');
          --
    
        Htp.p(i.emps);       
    
        Htp.p('</ul>');    
       End Loop;
    
      Htp.p('<p>No Employee </p>');
    
    end;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-01-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-16
      • 2010-12-28
      相关资源
      最近更新 更多