【问题标题】:Apex Data Load : 2 number columns from csv file select 1 based on the condition and load into tableApex 数据加载:来自 csv 文件的 2 个数字列根据条件选择 1 并加载到表中
【发布时间】:2019-02-08 21:16:19
【问题描述】:

我在 Oracle Apex 数据加载中遇到了一个问题,我将尝试以简单的方式解释:

我想在数据加载应用程序中复制 csv 数据(复制/粘贴)并应用转换、规则并将数据加载到表 BIKE 中。

  • csv 列(类型、金额-a、金额-b)

    blue, 10, 100
    green, 20, 200
    
  • 表 BIKE 列 (类型,金额)

我想创建一个转换来检查表 BIKE 中的列值是否为“蓝色”,然后加载数量-b,否则加载数量-a。

谁能帮我解决这个问题?

谢谢

【问题讨论】:

  • 嗨,你能分享一个你迄今为止尝试过的代码示例吗?
  • 简单的数据加载转换无法阻止加载器将amount-aamount-b 作为单独的列加​​载。这里最简单的方法是将 CSV 加载到临时表中,然后添加一个 PL/SQL 进程以从临时表加载到目标表中,以及您的转换规则。
  • type、amount-a 和amount-b 在csv 数据中,但在bike 表中只有2 列type 和amount,我想根据type 值中的内容填充amount。如果 type 的值为“blue”,则将 type 和 amount-b 插入到 bicke 表中,否则插入 type 和 amount-a。
  • 关于暂存表选项,我想我也可以尝试,我可以创建一个暂存表编写 pl/sql 代码但不知道如何在 pl/sql 中读取我的规则进行处理。我还没有创建任何运行进程的页面。如果您能指出我的任何示例,那就太好了!谢谢杰弗里。

标签: oracle-apex


【解决方案1】:

创建临时表,例如像这样(您需要调整列的详细信息以匹配您的数据模型):

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;

或者,如果您只是插入不需要合并的新记录,您可以使用简单的插入语句。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-29
    相关资源
    最近更新 更多