PLSQL中请求中的两个或多个计算

PLSQL中请求中的两个或多个计算,plsql,count,sum,Plsql,Count,Sum,我尝试进行两次转换,并在存储过程中返回值。 这是我的桌子: 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

我尝试进行两次转换,并在存储过程中返回值。 这是我的桌子:

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;

我相信你的语法有点错误。请尝试以下操作:

 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;

我相信你的语法有点错误。请尝试以下操作:

 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;

您还可以避免使用以下变量声明:

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;

您还可以避免使用以下变量声明:

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;