【发布时间】:2020-02-01 23:07:01
【问题描述】:
我在使用 ORACLE 过程时遇到问题,似乎 SELECT SUM 忽略了我的 WHERE 子句,并且汇总了所有列,而不仅仅是我想要的列(deptno)。 但是,如果我使用这样的功能之一,例如:
select SUM(SAL) AS SALSUM FROM SCOTT.EMP WHERE SCOTT.EMP.DEPTNO = 10;
它显示正确的 SUM。 可能是什么问题?感谢您的帮助。
CREATE OR REPLACE PROCEDURE PROCEDURE1(numerdept IN number, money OUT number) IS
SALSUM NUMBER;
COMMSUM NUMBER;
WYJATEK EXCEPTION;
BEGIN
IF numerdept IN (10, 20, 30) THEN
BEGIN
select SUM(SAL) INTO SALSUM FROM SCOTT.EMP WHERE SCOTT.EMP.DEPTNO = numerdept;
select SUM(COMM) INTO COMMSUM FROM SCOTT.EMP WHERE SCOTT.EMP.DEPTNO = numerdept;
money := SALSUM + COMMSUM;
END;
ELSE RAISE WYJATEK;
END IF;
EXCEPTION
WHEN WYJATEK THEN
BEGIN
dbms_output.put_line('Wrong deptno');
money := NULL;
END;
END;
-- checking --
SET SERVEROUTPUT ON;
DECLARE
pension number;
BEGIN
PROCEDURE1(10, pension);
dbms_output.put_line(pension);
END;
[编辑 3] 解决方案
select NVL(SUM(SAL), 0) INTO SALSUM FROM SCOTT.EMP WHERE SCOTT.EMP.DEPTNO = numerdept;
select NVL(SUM(COMM), 0) INTO COMMSUM FROM SCOTT.EMP WHERE SCOTT.EMP.DEPTNO = numerdept;
与
BEGIN
dbms_output.put_line('Wrong deptno');
money := 10;
END;
【问题讨论】:
-
WHERE 过滤行,而不是列。一行是一个数据记录。一列显示记录的一个字段。
-
一旦您解决了第一个问题,请停止与其他人一起编辑您的问题。它污染了线程并使其他人难以理解发布的答案。如果您还有其他问题,您应该提出一个新问题。