2017-04-26 46 views
0

我試圖做兩個agregations並返回存儲過程中的值。 這是我的表:PLSQL中的請求中的兩個或多個計算器

CREATE TABLE T_TEST (TEST NUMERIC(10)) ; 
INSERT INTO T_TEST VALUES (1) ; 
INSERT INTO T_TEST VALUES (2) ; 
INSERT INTO T_TEST VALUES (3) ; 

這工作:

DECLARE 
    vSUM NUMERIC(10) ; 
    vCOUNT NUMERIC(10) ; 
BEGIN 
    SELECT SUM(TEST) AS SUM INTO vSUM FROM T_TEST ; 
    DBMS_OUTPUT.PUT_LINE(vSUM) ; 
END; 

外的SP,這個工程;

SELECT SUM(TEST) AS SUM , COUNT(TEST) AS NB FROM T_TEST ; 

但這並不:

DECLARE 
    vSUM NUMERIC(10) ; 
    vCOUNT NUMERIC(10) ; 
BEGIN 
    SELECT 
    SUM(TEST) AS SUM INTO vSUM, 
    COUNT(TEST) AS NB INTO vCOUNT 
    FROM T_TEST ; 
    DBMS_OUTPUT.PUT_LINE(vSUM) ; 
    DBMS_OUTPUT.PUT_LINE(vCOUNT) ; 
END; 

回答

2

我相信你的語法稍微偏離。請嘗試以下操作:

DECLARE 
    vSUM NUMERIC(10); 
    vCOUNT NUMERIC(10); 
BEGIN 
    SELECT SUM(TEST), COUNT(TEST) -- SELECT and INTO lists should appear 
    INTO vSUM, vCOUNT    -- grouped together separately 
    FROM T_TEST; 
    DBMS_OUTPUT.PUT_LINE(vSUM); 
    DBMS_OUTPUT.PUT_LINE(vCOUNT); 
END; 
0

您還可以避免變量聲明像波紋管:

BEGIN 
    for x in (
    SELECT 
     SUM(TEST) sum_o_test 
     , COUNT(1) count_o_test 
    FROM T_TEST 
) loop 
    DBMS_OUTPUT.PUT_LINE('sum_o_test:' ||x.sum_o_test); 
    DBMS_OUTPUT.PUT_LINE('count_o_test:'||x.count_o_test); 
    end loop; 
END;