Oracle APEX:我可以将数据加载到多个表中吗?

问题描述 投票:0回答:1

我继承了一个 Oracle APEX 应用程序,我们用它来将数据导入到我们的系统中。输入数据由我们的一位客户以 CSV 格式发送给我们。我总体上熟悉 Oracle 数据库,但对 APEX 完全陌生。我们使用的是 APEX 版本 19.2。

APEX 应用程序使用数据加载向导接收 CSV,并将 CSV 列复制到具有匹配列的表中。

我们现在有一些额外的客户希望这样做,但他们正在发送一组完全不同的列。现有表有 25 列(一个键/ID 列,24 列保存 CSV 中的值)。 24 个值列特定于第一个客户的特定需求,不一定可供其他客户重复使用。要继续该模式,我需要向该表添加 16 列以支持第二个客户。我有几个客户需要添加,很快就会遇到 45 列的限制。单个 CSV 的列数不会超过 45;这只是所有 CSV 中所有列的并集超过该值的问题。

我想创建一个包含

IMPORT_ID
FIELD_NAME
FIELD_VALUE
列的子表,并让数据加载在子表中为 CSV 中给定行中的每一列创建一条记录。这将使我能够支持从任意其他客户导入数据,而无需更改 APEX 应用程序。

(由于我的公司缺乏 APEX 经验,我的希望是尽量减少未来更改的需要。从长远来看,我们打算用我们可以更好支持的技术堆栈上构建的东西完全取代这个应用程序;我试图弥合时间线的差距。)

深入研究 App Builder 中的数据加载定义 UI,我找不到将其配置为将列式 CSV 数据馈送到子表中的方法。我看到有一个社区插件存储库,但我发现没有可以执行此操作的插件,也没有类似的东西。我正在继续深入研究文档和其他资源,但到目前为止我还是一无所获。有人知道是否有办法控制导入吗?

我发现的一件事是

APEX_DATA_LOADER
,这看起来很有希望。如果我理解正确,我必须手动重新实现数据加载器,而不使用数据加载向导。我说的对吗?

oracle oracle-apex
1个回答
0
投票

我们现在有一些额外的客户希望这样做,但他们正在发送一组完全不同的列

如果可能,请尝试强制执行标准列及其数据类型集,以便所有客户以相同的格式发送数据。这样做,您就可以对所有这些使用当前的数据加载过程。

如果不可能,另一种方法(实施起来应该不会太困难)是为每个客户创建新的目标表并创建新的加载流程。通过导航菜单访问不同的流程。此外,创建一组存储过程(将它们放入一个包中),它将“读取”目标表并将数据传输到最终目的地。通过 Apex process 调用这些过程。 从我的角度来看(基于您所写的内容),尝试虚拟地“标准化”所有 CSV 文件以便您使用单个目标表(您当前拥有的表)将是最不可取的方法。这听起来像是很多条件性的东西(if

this

then that;为 Apex 中的列创建服务器端条件;等等),它们实际上可能有效,但很难维护。

© www.soinside.com 2019 - 2024. All rights reserved.