2014-06-09 43 views
0

我有以下在側存儲過程中運行的sql語句。該查詢將數據插入到TABLE_AB中,這些數據將從AAA和BBB表重試。當此過程正在運行時,我想查找插入到TABLE_AB中的記錄數。如果沒有包含數據,我想返回現在匹配的數據被發現插入到TABLE_AB。任何人都可以幫助理解如何完成它。在此先感謝您的幫助如何查找插入到sql表中的記錄數

INSERT INTO TABLE_AB (X,Y,Z, TOTAL_CNT, TOTAL_AMT) 
SELECT X,Y,Z, TOTAL_CNT, TOTAL_AMT 
FROM(

SELECT A.X, A.Y, A.Z , COUNT(1), SUM(AMT) 
FROM AAA A WHERE A.X = 1 
GROUP BY A.X, A.Y, A.Z 
UNION ALL 

SELECT B.X, B.Y, B.Z , COUNT(1), SUM(AMT) 
FROM BBB B WHERE A.X = 1 
GROUP BY B.X, B.Y, B.Z 

) AS AB 
GROUP BY AB.X, AB.Y , AB.Z 
+0

您已將此標籤標記爲Oracle和DB2。你正在使用哪個數據庫? –

+0

@Justine,我正在使用DB2 – KItis

回答

0

使用SQL%ROWCOUNT,就可以實現這一點。 SQL%ROWCOUNT返回上次成功執行的DML所影響的行數。

用法:

DECLARE 
    V_COUNT number; 

BEGIN 

INSERT INTO TABLE_AB (X,Y,Z, TOTAL_CNT, TOTAL_AMT) 
SELECT X,Y,Z, TOTAL_CNT, TOTAL_AMT 
FROM(

SELECT A.X, A.Y, A.Z , COUNT(1) TOTAL_CNT, SUM(AMT) TOTAL_AMT 
FROM AAA A WHERE A.X = 1 
GROUP BY A.X, A.Y, A.Z 
UNION ALL 

SELECT B.X, B.Y, B.Z , COUNT(1), SUM(AMT) 
FROM BBB B WHERE A.X = 1 
GROUP BY B.X, B.Y, B.Z 

) ; 

v_number := sql%rowcount; 

DBMS_OUTPUT.PUT_LINE(v_number); 

END; 
/

PS:這是甲骨文。

+0

你能幫我在DB2上做同樣的事嗎,我正在使用DB2 – KItis

+0

我不是DB2專家,但是你可以使用'GET DIAGNOSTICS rcount = ROW_COUNT;'。請參閱[此鏈接]中給出的示例(http://www-01.ibm.com/support/knowledgecenter/SSEPGG_9.7.0/com.ibm.db2.luw.sql.ref.doc/doc/r0005647.html?cp = SSEPGG_9.7.0%2F2-10-6-128&LANG = EN)。 – San