2017-04-26 8 views
0

2つのagregationsを作成してストアドプロシージャの値を返そうとしています。この作品PLSQLの要求で2つ以上の計算が発生する

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) ; 

: これが私のテーブルであるSPの

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

外は、これは動作します。

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; 
関連する問題