如何在APEX oracle中使用动态动作创建视图?

时间:2018-05-29 12:56:36

标签: oracle oracle-apex oracle-apex-5 oracle-apex-5.1

我创建了一个过程,使用APEX中的一个返回冒号分隔值的穿梭项动态创建一个视图。这是创建它的代码。

create or replace procedure create_temporary_view (input_employees in varchar2) is
begin
execute immediate 'create or replace view temp_batch_id as with emps(shuttle_item) as 
(select '''||input_employees||''' from dual)
select regexp_substr(shuttle_item, ''[^:]+'', 1, level) batch_id from emps connect by level <= regexp_count(shuttle_item, '':'') + 1;';
commit;
end;

在Execute PL / SQL代码动态操作中,我添加了类似

的代码
begin
create_temporary_view(:P12_EMPLOYEES);
end;

其中:P12_EMPLOYEES是给出冒号分隔值的穿梭项。 显然,当我从Oracle APEX中的SQL Commands选项卡执行此操作时,这段代码可以正常工作,但是不会从EXECUTE PL / SQL代码动态操作调用该过程。它有具体原因吗?如果是,那是什么?如果没有,可能出现的错误是什么?在此先感谢。

2 个答案:

答案 0 :(得分:0)

我不确定你的最终目标是什么,但我不会像这样从APEX创建任何表格或视图。

我认为你实际上想要填充一个集合。

看看如何在APEX中创建/填充集合,我想你会发现你想要做的任何事情。

答案 1 :(得分:0)

看起来您正在尝试对P12_EMPLOYEES变量进行标记。这不是正确的方法。 Apex具有内置的PL / SQL功能:

apex_string.split( :P12_EMPLOYEES, ':' )

这将为您提供一个apex_t_varchar2集合,按冒号分割。

为什么您的方法不是一个好主意,请考虑如果两个用户同时使用您的应用程序会发生什么。您将创建一个只有一个数据的用户可见的视图。