Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
优化PLSQL游标Oracle Apex_Oracle_Plsql_Oracle Apex_Cursors - Fatal编程技术网

优化PLSQL游标Oracle Apex

优化PLSQL游标Oracle Apex,oracle,plsql,oracle-apex,cursors,Oracle,Plsql,Oracle Apex,Cursors,我通过将HTML嵌入PLSQL来生成HTML报告。我已经通过两个游标和嵌套循环完成了这项工作,但我想对其进行优化。我的Oracle Apex报告正在生成此输出 ACCOUNTING - NEW YORK King - President Clark - Manager Miller - Clerk RESEARCH - DALLAS Jones - Manager Scott - Analyst Ford - Analyst Smith - Clerk Adams - Clerk SALES -

我通过将HTML嵌入PLSQL来生成HTML报告。我已经通过两个游标和嵌套循环完成了这项工作,但我想对其进行优化。我的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;

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

我认为嵌套游标循环——在本例中——完成了它应该做的事情。因为不同的HTML标签,我不认为其他解决方案会使它更好;也许更难阅读和理解。从现在的情况来看,你正在做什么以及你对结果的期望是非常清楚的


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

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

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;

是的,你是对的,但我需要构建复杂的界面,比如配置文件细节或一些基于卡片的复杂报告。所以我们需要使用HTML/CSS。