使用函数查找最大deptno

jmo0nnb3  于 2021-07-29  发布在  Java
关注(0)|答案(2)|浏览(230)

使用plsql,我必须使用函数从dept表中找到max deptno,这个函数在调用时将返回dept表中的max deptno。我的问题是,我如何才能做到这一点,而不留下空白的论点。
我的任务是:创建一个pl/sql函数,它将返回最大值(maximum) deptnodept 调用时的表。将此函数命名为 f_find_maxdept . 写一个匿名块来测试这个函数。
我的代码:

CREATE OR REPLACE FUNCTION f_find_maxdept()return number is 
max_deptno dept.deptno%TYPE;
begin
    select max(deptno) into max_dept from dept;
    return max_dept;
end f_find_maxdept;
yrdbyhpb

yrdbyhpb1#

如果函数不需要参数,那么应该省略括号

CREATE OR REPLACE FUNCTION f_find_maxdept return number ...
gopyfrb3

gopyfrb32#

您正在创建的函数和在该函数中查询的数据库表都需要位于同一架构中。
从create function语句的oracle文档中:
若要在自己的架构中创建或替换函数,必须具有“创建过程”系统权限。若要在其他用户的架构中创建或替换函数,必须具有“创建任何过程”系统权限。
我猜表dept在scott模式中,您正试图在模式中创建一个函数。
假设您具有create any procedure系统权限,则可以编写以下sql来创建函数:

create or replace function SCOTT.F_FIND_MAXDEPT
  return number
is
  MAX_DEPTNO  SCOTT.DEPTS.DEPTNO%type;
begin
  select max(DEPTNO)
    into MAX_DEPTNO
    from SCOTT.DEPTS;
  return MAX_DEPTNO;
end;

或者,可以在模式中复制depts表。

create table DEPTS as select * from SCOTT.DEPTS;

然后创建如下函数:

create or replace function F_FIND_MAXDEPT
  return number
is
  MAX_DEPTNO  DEPTS.DEPTNO%type;
begin
  select max(DEPTNO)
    into MAX_DEPTNO
    from DEPTS;
  return MAX_DEPTNO;
end;

测试函数的匿名pl/sql块是(假设您在模式中创建了depts表):

declare
  MAX_DEPT  DEPTS.DEPTNO%type;
begin
  MAX_DEPT := F_FIND_MAXDEPT;
  DBMS_OUTPUT.PUT_LINE(MAX_DEPT);
end;

相关问题