【发布时间】:2018-05-29 12:56:36
【问题描述】:
我创建了一个过程,以使用 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;
在执行 PL/SQL 代码动态操作中,我添加了类似的代码
begin
create_temporary_view(:P12_EMPLOYEES);
end;
其中 :P12_EMPLOYEES 是提供冒号分隔值的穿梭项目。 显然,当我从 Oracle APEX 中的 SQL 命令选项卡执行此代码时,这段代码有效,但未从 EXECUTE PL/SQL 代码动态操作调用该过程。有什么具体原因吗?如果是,那是什么?如果不是,可能的错误是什么?提前致谢。
【问题讨论】:
-
我想不出你为什么需要执行这样的任务。你想解决什么问题?
-
我想将一个客户映射到一组员工。假设我有 3 个客户和 10 个团队成员。例如Customer1 -> Employee2, 3, 4 ; Customer2 -> Employee1、8、9 等等。这个映射每个月都在变化,它不是固定的。我想保留这个映射到月底。与此视图创建相关的任务将仅由一个用户处理。稍后我打算将 customer_id 作为参数传递,以便为每个客户创建单独的视图。因此,每个客户的视图名称都类似于
temp_batch_id_<customer_id>。 -
听起来您应该修改表设计以适应此类信息,而不是围绕问题动态塑造 DDL,例如:包含 cust_id、emp_id、月份的 cust_emp_link 表
-
然后我将只使用另一个表来存储该信息并在月底删除数据。虽然我仍然想知道为什么它不起作用。谢谢@Scott
-
尝试删除字符串中的最后一个分号。您应该会在某处看到这些错误。
标签: oracle oracle-apex oracle-apex-5 oracle-apex-5.1