Plsql PL/SQL程序已成功完成,但当我想显示Max(部门ID)时,有人可以建议吗?
MaxDEPARTMENT\u ID,有人能推荐一下吗Plsql PL/SQL程序已成功完成,但当我想显示Max(部门ID)时,有人可以建议吗?,plsql,Plsql,MaxDEPARTMENT\u ID,有人能推荐一下吗 <set serveroutput on; DECLARE v_max_deptno DEPARTMENTS.DEPARTMENT_ID%TYPE; BEGIN SELECT Max(department_id) INTO v_max_deptno FROM departments Where department_id = v_max_deptno; DBMS_OUTPUT.PUT_LINE('The maxim
<set serveroutput on;
DECLARE
v_max_deptno DEPARTMENTS.DEPARTMENT_ID%TYPE;
BEGIN
SELECT Max(department_id)
INTO v_max_deptno
FROM departments
Where department_id = v_max_deptno;
DBMS_OUTPUT.PUT_LINE('The maximum department_id is: '|| v_max_deptno);
END;/>
您的查询没有多大意义,因为它试图查找MAXdepartment\u id并将其值放入V\u MAX\u DEPTNO变量,而WHERE子句中使用了相同的变量 在声明时,V_MAX_DEPTNO为NULL,WHERE子句中也是NULL,并且没有部门的ID等于NULL,因此查询不返回任何内容 如果您初始化了V_MAX_DEPTNO,这当然是愚蠢的,您会得到一些东西: 所以问题是:你想做什么?我认为,正确的做法是删除WHERE条款,即
SQL> DECLARE
2 v_max_deptno departments.department_id%TYPE := 20;
3 BEGIN
4 SELECT MAX (department_id)
5 INTO v_max_deptno
6 FROM departments;
7
8 DBMS_OUTPUT.put_line ('The maximum department_id is: ' || v_max_deptno);
9 END;
10 /
The maximum department_id is: 40
PL/SQL procedure successfully completed.
SQL>
本声明:
v_max_deptno DEPARTMENTS.DEPARTMENT_ID%TYPE;
用于局部变量。由于您不提供默认值,并且从未为其分配任何值,因此默认为NULL
SQL查询中的此谓词:
Where department_id = v_max_deptno
意味着查询应该只返回部门id等于该变量中的值的行。由于变量为NULL,并且没有值可以等于NULL,因此查询不返回任何行
由于查询基于简单的聚合最大值,因此查询返回时不会出错。由于没有行,MAX函数再次将NULL返回到同一变量中
为了获得进一步的帮助,您需要解释代码的用途以及希望获得的价值。如果需要表中所有行的当前最大部门id,只需删除where子句即可
注意:如果您发现当前最大ID的目的是为新记录设置AddiStUnID,则该方法与需要考虑的并发会话有一些其他问题。
如果您获得了错误,您得到的错误是什么?删除Dead StUnid=VyMax XDeTNO的WHERE子句。Where department_id = v_max_deptno