【问题标题】:How to create view using dynamic action in APEX oracle?如何在 APEX oracle 中使用动态操作创建视图?
【发布时间】: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_&lt;customer_id&gt;
  • 听起来您应该修改表设计以适应此类信息,而不是围绕问题动态塑造 DDL,例如:包含 cust_id、emp_id、月份的 cust_emp_link 表
  • 然后我将只使用另一个表来存储该信息并在月底删除数据。虽然我仍然想知道为什么它不起作用。谢谢@Scott
  • 尝试删除字符串中的最后一个分号。您应该会在某处看到这些错误。

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


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

    您似乎正在尝试标记您的 P12_EMPLOYEES 变量。这不是正确的做法。 Apex 具有用于执行此操作的内置 PL/SQL 函数:

    apex_string.split( :P12_EMPLOYEES, ':' )
    

    这会给你一个apex_t_varchar2 集合,用冒号分隔。

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

    【讨论】:

    • 我想将一个客户映射到一组员工。假设我有 3 个客户和 10 个团队成员。例如Customer1 -> Employee2, 3, 4 ; Customer2 -> Employee1、8、9 等等。这个映射每个月都在变化,它不是固定的。我想保留这个映射到月底。与此视图创建相关的任务将仅由一个用户处理。稍后我打算将 customer_id 作为参数传递,以便为每个客户创建单独的视图。所以每个客户的视图名称就像temp_batch_id_&lt;customer_id&gt;
    • 所有数据都属于一个表。存储数据和关系是表用于的。听起来你想要一个有两列 customer_id 和 employee_id 的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多