1

我有一个 ApEx 应用程序,除其他目的外,它需要上传电信提供商提供的计费数据。数据以 CSV 文件的形式提供。

我们有两张桌子。第一个表phone_invoice包含每张发票的元数据,例如计费日期和提供商名称。第二个表phone_invoice_detail主要基于通话记录。

phone_invoice_detail有一个外键,invoice_id,它键入phone_invoice(id). 这将创建库存标准的主从关系。

我们已使用 ApEx 数据加载向导为我们的用户设置导入功能。但我需要将 分配invoice_id给每个导入的行。

目前,我有一个电话发票页面。用户单击“导入发票数据”按钮,该按钮会跳转到“数据加载向导”并设置一个页面项目,P1000_INVOICE_ID其值为该发票 ID - P999_ID

当用户开始处理时,提供的 CSV 数据包含发票 ID 之外的所有字段。我想要的是基础表中的该列 - invoice_id- 设置为P1000_INVOICE_ID.

我目前的重点是使用转换规则。这非常令人沮丧,因为文档没有告诉您有关它们的任何信息,也没有示例。

我尝试过的排列:

-- PL/SQL Expression:
:INVOICE_ID := :P1000_INVOICE_ID
:INVOICE_ID := :P999_ID
SELECT :P1000_INVOICE_ID INTO :INVOICE_ID FROM DUAL
SELECT :P999_ID INTO :INVOICE_ID FROM DUAL

-- Replace:
-- Expression 1           Expression 2
:P1001_INVOICE_ID         :INVOICE_ID
:P999_INVOICE_ID          :INVOICE_ID
4

1 回答 1

0

如您所见,APEX 为导入创建了 4 个页面。它使用命名的顶点集合LOAD_CONTENT来存储导入的数据。因此,您可以在将其加载到表中之前更改此集合。

转到名为“数据验证”的页面(此页面有报告Data Validation),并添加页面进程,并带有下一个参数:

类型: PL/SQL 匿名块

处理点:加载时 - 标头之前

来源

declare 
  -- Local variables here
  i integer;
begin
  for i in (
    select t.seq_id
     from apex_collections t
     where t.collection_name = 'LOAD_CONTENT'
  ) loop
    apex_collection.update_member_attribute(
      p_collection_name => 'LOAD_CONTENT',
      p_seq => i.seq_id,
      p_attr_number => 3, -- here number of your column you want update
      p_attr_value => :P1000_INVOICE_ID -- value 
    );      
  end loop;  
end;

但是改变你的列的这个进程号。我已经在我的 APEX 版本 4.1 中尝试过这个示例 - 它工作正常。

于 2013-07-03T09:57:23.990 回答