优化 PLSQL 游标 Oracle Apex
Optimize PLSQL Cursor Oracle Apex
我正在通过将 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;
我要优化一下。是否可以通过游标变量中的内部连接在一个循环中实现相同的输出。如果是,请帮助。
我会说嵌套游标循环 - 在这种情况下 - 做了它应该做的事情。由于 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 嵌入到 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;
我要优化一下。是否可以通过游标变量中的内部连接在一个循环中实现相同的输出。如果是,请帮助。
我会说嵌套游标循环 - 在这种情况下 - 做了它应该做的事情。由于 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;