2013-08-27 61 views
0

即時通訊Oracle和SQL新手,但我被分配了這份工作,希望有人能幫助我解決這個問題。比較一個數據堆棧是否存在於兩個不同的表中

基本上我給了一個數據庫鏈接來連接到遠程數據庫,我從那裏的一個表中提取一些信息,並從本地數據庫中提取一些其他表,然後處理它並將其插入到本地數據庫。我成功地做到了這一點,但現在我需要一種方法來確認來自遠程數據庫的所有數據實際上都已複製到本地數據庫中。我會如何去做這件事?

這是我必須將信息插入到本地數據庫的代碼。

INSERT INTO kcrt_requests_int RI 
    RI.TRANSACTION_ID, 
    RI.DESCRIPTION, 
    RI.CREATED_USERNAME, 
    RI.REQUEST_TYPE_ID, 
    RI.STATUS_ID, 
    RI.WORKFLOW_ID, 
    RI.WORKFLOW_STEP_ID, 
    RI.RELEASED_FLAG, 
    RI.USER_DATA1, 
    RI.USER_DATA2, 
    RI.USER_DATA3, 
    RI.USER_DATA4, 
    RI.USER_DATA7) 

SELECT 
    KCRT_TRANSACTIONS_S.NEXTVAL, 
    RD.PARAMETER13||' '||R.DESCRIPTION, 
    '[SYS.USERNAME]', 
    '0001', 
    '31876', 
    '34987', '1234', 
    'Y', 
    PP.PROJECT_ID, 
    VP.REVIEWDATE, 
    RD.PARAMETER9, 
    R.REQUEST_ID, 
    RD.PARAMETER13 

FROM 
    KCRT_REQUEST_TYPES_NLS RT, 
    KCRT_REQUESTS R, 
    KCRT_REQUEST_DETAILS RD, 
    [email protected] VP, 
    PM_PROJECTS PP 


WHERE 
    R.REQUEST_TYPE=RT.REQUEST_TYPE_ID 
    AND R.REQUEST_ID=RD.REQUEST_ID 
    AND RD.BATCH_NUMBER=1 
    AND RT.REQUEST_TYPE_NAME 'AAAAA' 
    AND R.STATUS_CODE = 'BBBBB' 
    AND RD.PARAMETER13 = to_char(VP.IDBANK) 
    AND VP.REVIEWDATE=(SELECT MAX (VP.REVIEWDATE) FROM [email protected] VP) 
    AND R.REQUEST_ID=PP.PFM_REQUEST_ID 
    AND RD.BATCH_NUMBER=1 

所以相當多,我將盡力RI.USER_DATA7比較VP.IDBANK,看看是否有KCRT_REQUESTS_INT每次v_projects @ XXXXX有一行。

感謝您的幫助!

+2

我不能進入你的表的細節,因爲它需要比我有更多的時間來分析查詢,但一般來說,你可以比較兩個表與這兩個查詢:'SELECT * FROM TableA MINUS SELECT * FROM TableB'將列出'TableA'中不在'TableB'中的任何行,並且'SELECT * FROM TableB MINUS SELECT * FROM TableA'將列出'TableB'中不在'TableA'中的任何行。希望這可以幫助。 –

回答

0

如果有一個唯一標識符列被定義爲主鍵。如果是,您可以在主鍵上連接兩個表並查看計數是否與沒有在源表上連接的計數匹配。

假設,表A是您的來源,表B是您加載數據的位置。讓P_key成爲主鍵列。

可以匹配:

select count(1) 
from Table_A with 

select count (1) 
from Table_A,Table_B 
where Table_A.P_key=Table_B.P_Key 

如果匹配,你把所有的記錄。希望這可以幫助。

相關問題