Oracle 创建PL/SQL块以将新记录插入Department表。从department表中获取最大部门id并向其添加10;
创建PL/SQL块以将新记录插入Department表。从department表中获取最大部门id并向其添加10Oracle 创建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
我看不到图像,但-以下是我如何理解你的作业: 当前表格内容:
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
- 插入一行
- 对于第二个(和其他)用户,该操作失败,因为第一个用户(成功插入行)违反了主键