首页 > 解决方案 > 创建一个 PL/SQL 块以将新记录插入到 Department 表中。从 Department 表中获取最大部门 id 并将其加 10;

问题描述

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

标签: oracleplsql

解决方案


我看不到图像,但是 - 我是这样理解你的作业的:

当前表格内容:

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到它
  • 插入一行
  • 第二个(和其他)用户失败,因为第一个用户违反了主键 - 谁成功插入了行

但是没问题; 对于一个简单的家庭作业问题,我猜你不太关心这些事情。


推荐阅读