oracle-apex - Apex 数据加载:来自 csv 文件的 2 个数字列根据条件选择 1 并加载到表中
问题描述
我在 Oracle Apex 数据加载中有一个问题,我将尝试以简单的方式解释:
我想在数据加载应用程序中复制 csv 数据(复制/粘贴)并应用转换和规则并将数据加载到表 BIKE 中。
csv 列(类型、金额-a、金额-b)
blue, 10, 100 green, 20, 200
表 BIKE 列(类型、数量)
我想创建一个转换来检查表 BIKE 中的列值是否为“蓝色”,然后加载数量-b,否则加载数量-a。
谁可以帮我这个事?
谢谢
解决方案
创建一个临时表,例如像这样(您需要调整列的详细信息以匹配您的数据模型):
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;
或者,如果您只插入不需要合并的新记录,则可以使用简单的插入语句。
推荐阅读
- c# - 是否可以实例化一个对象并使用 Activator.CreateInstance 将对象初始化器变量传递给它?
- python - 如何解决 numpy.arange 无法正常工作的问题?
- mysql - MySQL - 递归列出表中所有项目的所有父母和祖先
- stata - 计算具有重复 ID 的观察值
- logging - 静态块未显示在 CMS 页面中,我正在使用 Magento2
- python - Twitter 搜索 API 多个哈希标签
- python - 组合/合并熊猫中的值
- android - Handle touch outside textview after selectable text menu appears in android
- angular - Ionic5 angular9 vendor-es2015.js ERROR [object Object]
- django - Inherit from abstract class Django