как пройти через листаг - PullRequest
       10

как пройти через листаг

0 голосов
/ 26 января 2019

Можете ли вы помочь мне с Bestway, чтобы решить нижеприведенную проблему?

Проблема: у меня есть страница на вершине оракула, в которой есть отчет со столбцами в виде названий отделов и сотрудников, а также флажков. После выбора одного или нескольких флажков и нажатия кнопки отправки должно произойти следующее.

  1. код pl / sql должен извлекать названия отделов всех выбранных строк из таблицы emp.
  2. Далее следует выбрать имена сотрудников под каждым отделом для выбранных флажков.

Как лучше всего это сделать?

Ниже мой код.

    FOR i in 1..APEX_APPLICATION.G_F01.count
    LOOP
    IF APEX_APPLICATION.G_F01(i) IS NOT NULL THEN
      select listagg(dept_name,',') WITHIN GROUP (ORDER BY 
      TESTSET_PATH) into str_dept_names from emptable
      WHERE 
      emptable._ID=APEX_APPLICATION.G_F01(i) group by dept_name;
     END IF;   
    END LOOP;


    FOR REC IN str_dept_names
    LOOP
      FOR i in 1..APEX_APPLICATION.G_F01.count
       LOOP
       IF APEX_APPLICATION.G_F01(i) IS NOT NULL THEN
          select  listagg(ename,',') WITHIN GROUP (ORDER BY 
          dept_name) into str_enums from 
          emptable where dept_name LIKE 
          (rec.str_dept_names) and 
          emptable .ID 
         =APEX_APPLICATION.G_F01(i);

        myclob:=-myclob||'java -jar test.jar - 
        dept'||rec.str_dept_names||str_testnums;

        END IF;
     END LOOP;
     END LOOP;

Мой вывод в myclob должен быть: deptA, emp1, emp2

1 Ответ

0 голосов
/ 28 января 2019

Пакет apex_string, добавленный в Apex 5, работает с вложенными таблицами, которые очень хорошо работают с SQL. Недостатком является то, что вы должны сделать преобразование. Поэтому я обычно делаю что-то подобное, чтобы избежать циклов:

if apex_application.g_f01.count > 0 then
    l_dept_ids := apex_string.split( apex_util.table_to_string( 
        apex_application.g_f01 ), ':' );

    select listagg(dept_name,',') WITHIN GROUP (ORDER BY 
           TESTSET_PATH) into str_dept_names 
      from emptable
     WHERE emptable._ID MEMBER OF l_dept_ids
end if;

Я не уверен, что понимаю ваш второй запрос достаточно. Вы используете предложение LIKE, но это кажется очень странным. id не является первичным ключом?

...