2017-04-26 45 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;