如何为使用数据加载向导插入的所有记录分配共享外键?

时间:2013-07-03 03:53:40

标签: oracle-apex

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

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

phone_invoice_detail有一个外键invoice_id,可以键入phone_invoice(id)。这将创建一个股票标准的主 - 细节关系。

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

目前,我有一个电话发票页面。用户单击“导入发票数据”按钮,该按钮将分支到“数据加载向导”,并使用该发票ID的值P1000_INVOICE_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

1 个答案:

答案 0 :(得分: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版中试过这个例子 - 它工作正常。