我正在尝试根据存储在集合对象中的值在ApEx中创建一个选择列表。
基本上我正在运行一个调用java类的存储过程,该类设置varchar2数组的值。
要获取值并将它们打印到dbms输出,我可以运行以下PLSQL块:
DECLARE
vArray testschema.stringarray_type := testschema.stringarray_type();
BEGIN
testschema.getLOV(vArray);
FOR i IN 1..vArray.COUNT LOOP
DBMS_OUTPUT.PUT_LINE('Counter: ' || i || ' Value: "' || vArray(i) || '".');
END LOOP;
END;
现在我只需要将所有这些值放入选择列表而不是打印出来。
如何重写此PLSQL代码以替代选择列表的LOV源?
有没有办法让我更改代码来执行以下操作:
FOR i IN 1..vArray.COUNT LOOP
:P1_SELECT_LIST.append(vArray(i));
END LOOP;
并在动态动作中运行它?
由于
编辑:
我做了一个临时解决方法,现在我在页面加载时使用动态操作来运行一些PLSQL。我将对象中的每个值附加到我的plsql块中的varchar2变量,用逗号分隔。然后,我将隐藏的页面项设置为等于该变量的值,因此它包含的值类似于:
item1,item2,item3,item4,item5
然后通过javascript动态操作,我将项目值拆分为逗号,然后用自定义构建的html字符串替换选择列表的html,以将所有项目列为选项。
这不是我理想的解决方案,所以我还想弄清楚是否有更好的方法。或者也许这个解决方法的一部分可用于更好的解决方案。
答案 0 :(得分:0)
如果您将过程修改为返回一个varray的函数,那么您可以创建一个动态APEX List of Values对象,其查询定义如下:
BEGIN
return 'select column_value d, column_value r from table(testschema.getLOV())';
END;
答案 1 :(得分:0)
您可以使用POPUP_FROM_QUERY函数。阅读http://docs.oracle.com/cd/E23903_01/doc/doc.41/e21676/apex_item.htm#CHDEBCCI
答案 2 :(得分:0)
用Tony建议的功能包裹你的程序:
create
function apx_getLOV
return testschema.stringarray_type
as
l_result testschema.stringarray_type;
begin
testschema.getLOV(l_result);
return l_result;
end apx_getLOV;
/
您在LOV源中的查询将是下一个:
select column_value d, column_value r from table(apx_getLOV())
您可以阅读关于表格集合表达式here。