Plsql PL/SQL程序已成功完成,但当我想显示Max(部门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

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