Oracle 创建PL/SQL块以将新记录插入Department表。从department表中获取最大部门id并向其添加10;

Oracle 创建PL/SQL块以将新记录插入Department表。从department表中获取最大部门id并向其添加10;,oracle,plsql,Oracle,Plsql,创建PL/SQL块以将新记录插入Department表。从department表中获取最大部门id并向其添加10 我看不到图像,但-以下是我如何理解你的作业: 当前表格内容: SQL> select * from dept; DEPTNO DNAME LOC ---------- -------------------- -------------------- 10 ACCOUNTING NEW YORK

创建PL/SQL块以将新记录插入Department表。从department表中获取最大部门id并向其添加10


我看不到图像,但-以下是我如何理解你的作业:

当前表格内容:

SQL> select * from dept;

    DEPTNO DNAME                LOC
---------- -------------------- --------------------
        10 ACCOUNTING           NEW YORK
        20 RESEARCH             DALLAS
        30 SALES                CHICAGO
        40 OPERATIONS           BOSTON
程序:

SQL> create or replace procedure p_ins_dept (par_dname in varchar2, par_loc in varchar2) is
  2    l_deptno number;
  3  begin
  4    select max(deptno)
  5      into l_deptno
  6      from dept;
  7
  8    insert into dept (deptno, dname, loc)
  9      values (nvl(l_deptno, 0) + 10, par_dname, par_loc);
 10  end;
 11  /

Procedure created.
测试:

SQL> exec p_ins_dept ('Test', 'Zagreb');

PL/SQL procedure successfully completed.

SQL> select * from dept;

    DEPTNO DNAME                LOC
---------- -------------------- --------------------
        50 Test                 Zagreb                    --> here it is
        10 ACCOUNTING           NEW YORK
        20 RESEARCH             DALLAS
        30 SALES                CHICAGO
        40 OPERATIONS           BOSTON

SQL>

请注意,这种方法在多用户环境中可能会失败,其中

  • 两个(或更多)用户同时调用该过程
  • 获取
    MAX
    部门编号值
  • 添加
    10
  • 插入一行
  • 对于第二个(和其他)用户,该操作失败,因为第一个用户(成功插入行)违反了主键
但还好;对于一个简单的家庭作业问题,我想你不太关心这些事情