我在Oracle Apex数据加载中遇到一个问题,我将尝试以一种简单的方式进行解释:
我想在数据加载应用程序中复制csv数据(复制/粘贴)并应用转换,并规则并将数据加载到表BIKE中。
csv列(类型,数量-a,数量-b)
blue, 10, 100
green, 20, 200
表BIKE列 (类型,数量)
我想创建一个转换以检查表BIKE中的列值是否为'blue',然后加载数量-b,否则为-a。
有人可以帮我吗?
谢谢
答案 0 :(得分:0)
创建登台表,例如这样(您需要调整列的详细信息以匹配您的数据模型):
create table bike_staging
(
apex_session number not null,
bike_id number not null,
bike_type varchar2(100) not null,
amount_a number,
amount_b number
);
添加触发器以填充session_id:
create or replace trigger bi_bike_staging
before insert on bike_staging for each row
begin
:new.apex_session := v('APP_SESSION');
end bi_bike_staging;
在“准备上载的数据”过程的两侧,在数据加载向导的第三页中添加两个过程,如下所示:
“删除登台表”的代码将如下所示:
delete bike_staging where apex_session = :APP_SESSION;
“载重自行车”的代码可能是这样的:
merge into bikes t
using (select bike_id,
bike_type,
case bike_type
when 'BLUE' then amount_b
else amount_a
end as amount
from bike_staging
where apex_session = :APP_SESSION
) s
on (t.bike_id = s.bike_id)
when matched then update set
t.bike_type = s.bike_type,
t.amount = s.amount
when not matched then insert (bike_id, bike_type, amount)
values (s.bike_id, s.bike_type, s.amount);
delete bike_staging where apex_session = :APP_SESSION;
或者,如果您仅插入新记录而无需合并,则可以使用简单的插入语句。