我有一个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
答案 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版中试过这个例子 - 它工作正常。