要求:
我们有月度运行流程,我们在其中创建Table1
和Table2
。
1。如果我们在1月份运行了我们的流程,就会创建Table2
。自从Jan首次运行以来,我们之前没有创建Table1。因此,系统应该将Table2
中的所有内容放入Table1
。
2。现在让我们说如果我们在2月份运行我们的流程它会创建Table2
。我们的系统应检查Table1
是否存在。如果是,则(t2.Run_dt > t1.Insert_dt)
然后从Table2
中选择Table1
中不存在的所有ID,并将这些记录插入/追加到Table1
。
3。现在让我们说,如果我们再次在2月重新运行我们的流程,它会创建Table2
。如果是,我们的系统应检查Table1是否存在,(t2.Run_dt = t1.Insert_dt)
然后从Table2
中选择Table1
中不存在的所有ID,并将这些记录插入/追加到Table1
。
4. 等等......
我有这两张桌子;
Table1
ID Price Insert_Dt
----- ------- -------------
345 24.35 01-APR-2015
Table2
ID Price Run_Date
----- ------- -------------
345 24.35 01-MAY-2015
678 15.35 01-MAY-2015
我想在下面给出的逻辑上编写一个更新table1的查询。
如果Table1.Run_date >= Table2.Insert_Dt
和Table2 - Table1 = records found
然后将新记录插入Table1
如果Table1.Run_date >= Table2.Insert_Dt
和Table2-Table1 = no records found
然后什么都不做
否则不做任何事
DECLARE
nCount NUMBER;
mCount NUMBER;
BEGIN
select count(*) into nCount from dba_tables where table_name = Table1;
if ( (nCount>0)
and ( (select max(a.Run_Date) from Table1 a)
> (select max(b.Insert_Date) from Table2 b) ) )
then
create table difference as
select * from Table2 c where c.ID not in(select d.ID from Table2 d)
select count(*) into mCount
from dba_tables
where table_name = 'difference';
if (nCount > 0) then insert /*+ append */ into Table1
select ID,Price,Run_Date
from (select ID,Price,Insert_Date from difference);
end
END;
答案 0 :(得分:0)
我认为这就是你所描述的,但我有几个问题:
class Application
{
private Process _process;
private static string _applicationPath = string.Empty;
public void Start(string arguments)
{
if (!File.Exists(_applicationPath))
Deploy();
_process = Process.Start(_applicationPath, arguments);
}
public void SomeMethod()
{
//method that manipulate _process
}
private void Deploy()
{
// copying, installation steps (takes some time) and assign _applicationPath
}
}
insert into table1
with max_run as (
select id, max (insert_dt) as max_date
from table1
group by id
)
select
t2.id, t2.price, t2.run_date
from
table2 t2,
max_run t1
where
t2.id = t1.id (+) and
-- (t1.id is null or t2.run_date >= t1.max_date) changed below, per edit
(t1.id is null or t2.run_date > t1.max_date)
而不是>= insert_dt
吗?拥有> insert_dt
意味着我们会一遍又一遍地插入这些记录,即使它们不是新的