能否请您帮我解决以下问题的最佳方法?
问题:我有一个oracle apex页面,其中有一个报告,其中包含列作为部门名称和员工名称以及复选框。选择一个或多个复选框并单击“提交”按钮后,就会发生此情况。
完成此操作的最佳方法是什么?
下面是我的代码。
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
答案 0 :(得分:0)
在Apex 5中添加的apex_string
程序包可与嵌套表一起使用,而嵌套表可与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
不是主键吗?