在ApEx中从数据库集合对象创建LOV

时间:2013-07-05 14:21:39

标签: plsql oracle-apex

我正在尝试根据存储在集合对象中的值在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,以将所有项目列为选项。

这不是我理想的解决方案,所以我还想弄清楚是否有更好的方法。或者也许这个解决方法的一部分可用于更好的解决方案。

3 个答案:

答案 0 :(得分:0)

如果您将过程修改为返回一个varray的函数,那么您可以创建一个动态APEX List of Values对象,其查询定义如下:

BEGIN
    return 'select column_value d, column_value r from table(testschema.getLOV())';
END;

答案 1 :(得分:0)

答案 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