Оптимизация курсора PLSQL Oracle Apex

Я делаю отчет HTML, встраивая html в PLSQL. Я сделал это с помощью 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;

Я хочу его оптимизировать. Можно ли добиться того же вывода в одном цикле с внутренним соединением в переменной курсора. Если да, пожалуйста, помогите.


person Sumaiya Qureshi    schedule 18.06.2020    source источник


Ответы (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;
person Popeye    schedule 18.06.2020

Я бы сказал, что вложенные циклы курсора — в данном случае — делают то, что должны делать. Из-за разных тегов HTML я не думаю, что другие решения сделают его лучше; может быть, немного сложнее читать и понимать. То, как оно есть сейчас, совершенно ясно, что ты делаешь и чего ждешь в результате.

Однако есть ли какая-то конкретная причина, почему вы делаете это таким образом? Apex предлагает интерактивные и классические отчеты, которые делают это легко, всего за несколько кликов. Я предлагаю вам использовать один из них вместо вашего собственного кода.

person Littlefoot    schedule 18.06.2020
comment
Да, вы правы, но мне нужно создавать сложные интерфейсы, такие как детали профиля или сложные отчеты на основе карт. Поэтому для этого нужно использовать HTML/CSS. - person Sumaiya Qureshi; 18.06.2020