select子语句包含针对两个数据库的子查询

时间:2015-08-27 18:09:15

标签: sql oracle stored-procedures plsql

我有以下代码来显示我在存储过程中“尝试”完成的任务:

    select * from
    (   
    select to_char(sum(aa.amount)) 
    from additional_amount aa, status st
    where aa.int_tran_id = st.int_tran_id
    and st.stage in ('ACHPayment_Confirmed')
    and aa.entry_timestamp > ( 
                              select to_date(trunc(last_day(add_months(sysdate,-1))+1), 'DD-MON-RR') AS "day 1" 
                              from dual
                              )

    )
     UNION ALL
  (
    select distinct it.debit_acct as "debit_accounts"
    from internal_transactions it
    where it.debit_acct IN ( select texe_cnasupro
                              from service.kndtexe, service.kndtctc
                              where texe_cncclipu = tctc_cncclipu
                              and tctc_cntipcli = 'C'
                            )
    )
      union all
    (select distinct it.credit_acct as "credit_account"
    from internal_transactions it
    where it.credit_acct IN (select texe_cnasupro
                              from service.kndtexe, service.kndtctc
                              where texe_cncclipu = tctc_cncclipu
                              and tctc_cntipcli = 'C'
                              )
    )
    ;

输出:

TO_CHAR(SUM(AA.AMOUNT))                
----------------------------------------
130250292.22                            
6710654504                               
0000050334                               
2535814905                               
0007049560                                          
5 rows selected 

输出的第一行是我在SP中需要的输出,基于以下两个查询,我猜测需要对顶部select语句进行子查询。

顶部选择是选择具有连接的表与另一个表进行过滤的数量之和(输出: 130250292.22 )。

第二个和第三个选择实际上是检查internal_transactions表中的帐户是否已注册服务db中的相应两个表,这两个表是同一服务器上的不同db(由同一应用程序拥有)。

“service”db中的表没有与第一个select中相同的公共主键,这些主键是针对同一个数据库的。

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

我不明白你的问题,但我知道你可以简化这一点:

to_date(trunc(last_day(add_months(sysdate,-1))+1), 'DD-MON-RR') AS "day 1" 

到这个

trunc (sysdate, 'mm')

并且您不需要来自DUAL的SELECT也可以这样做。

and aa.entry_timestamp > trunc (sysdate, 'mm')