oracle - 创建一个 PL/SQL 块以将新记录插入到 Department 表中。从 Department 表中获取最大部门 id 并将其加 10;
问题描述
创建一个 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
到它 - 插入一行
- 第二个(和其他)用户失败,因为第一个用户违反了主键 - 谁成功插入了行
但是没问题; 对于一个简单的家庭作业问题,我猜你不太关心这些事情。
推荐阅读
- python - 可以使用 threading.Event 来保护 Python 中的变量访问吗?
- api - tmforum open-api 账户管理服务规范中计费账户和财务账户有什么区别
- database - 如何修改liquibase中sql脚本的默认执行顺序?
- python - pythonic方法来计算多列有条件检查
- c++ - 找不到“assimp/config.h”,但它在文件夹中
- java - 需要更改 Spring Cloud 中的引导程序环境
- php - 如何在 Windows 上的 Eclipse 中安装 PHP Xdebug?
- python-3.x - AttributeError:“列表”对象没有属性“超时”
- node.js - 更新 formik.values 时需要 Formik 奇数 (.value)
- python - SQLAlchemy 从 JSON 列表插入数据库