我想了解如何修复程序中发现的小错误,该错误在Oracle数据库和SQL服务器数据库之间传输数据,用于我支持的Web订购系统。
问题是,当两个订单在同一天出现129和130时,如果后续订单(130)首先得到验证,那么之前的网络订单(129) 不会转移到Oracle DB。发生这种情况是因为该程序检查传输到Oracle DB的最大Web订单,并尝试仅移动高于此的SQL Web订单号。
在SSIS包中构建的支持此概念的查询如下:
在Oracle方面
Select nvl(max(web_order_id),0) maxOrderIDParam from web_shipping
在SQL Server端
SELECT cast(web_order_id as float) web_order_id, web_entry_date, site_num, protocol_num, inv_num, cast(pharm_num as float) pharm_num, status, comments, username, porstatus
FROM Web_Shipping
WHERE web_order_id > ?
AND status = 'V'
ORDER BY web_order_id
在Oracle方面
insert into web_shipping (web_order_id, web_entry_date, site_num, protocol_num, inv_num, pharm_num, status, comments, username, porStatus)
values (:web_order_id, :web_entry_date, :site_num, :protocol_num, :inv_num, :pharm_num, :status, :comments, :username, :porStatus)
在SQL Server端
select cast(web_order_id as float) web_order_id, line_id, cast(no_of_participants as float) no_of_participants, cast(amt_inventory as float) amt_inventory, cast(NSC_num as float) NSC_num, cast(dose_str as float) dose_str, dose_unit, dose_form, dose_mult, cast(amt_req as float) amt_req
FROM web_ship_detail
WHERE web_order_id = ?
最后在Oracle方面
insert into web_ship_detail (web_order_id, line_id, no_of_participants, amt_inventory, NSC_num, dose_str, dose_unit, dose_form, dose_mult, amt_req)
values (:web_order_id, :line_id, :no_of_participants, :amt_inventory, :NSC_num, :dose_str, :dose_unit, :dose_form, :dose_mult, :amt_req)
努力的目的是在整个SSIS包中设计一个最小代码更改的解决方案。
答案 0 :(得分:2)
我知道您正在寻找最少的代码更改,不确定这些是否合格但会100%解决问题。有3个选项:
修改MS SQL表并包含" IsTransferred"位列。将已验证的记录移至oracle时,将列更新为1 / true
跟踪已转移到Oracle的单独订单表。当选择MS SQL命令时,不包括那些新的"转移"表
使用Oracle& A创建数据流对象。 MS SQL命令表作为源,使用合并连接,使用左外部。使用Oracle列为空的结果(没有匹配的Oracle记录,没有传输)并使用这些记录转移到Oracle。
不知道双方有多少记录,因此某些选项可能存在性能问题。