首页 > 解决方案 > 遇到异常时插入的plsql

问题描述

编写一个 PL/SQL 程序(匿名块)以在 dept 表中插入一个新的部门记录,其值如下。(NULL,'LOGISTICS','新加坡')。检查您是否能够成功插入具有这些值的行。如果不成功,则处理限制插入行的错误(使用非预定义异常处理)。异常处理部分应该从表中找到最大的deptno,将其增加1并使用它来插入新记录。我不知道如何插入最大部门编号 +1 的新记录以及“LOGISTICS”、“SINGAPORE”。该值应为 (max(deptno)+1,'LOGISTICS','SINGAPORE')。

我的代码。

declare
e_insert_excep exception;
pragma exception_init(e_insert_excep,-01400);
begin
insert into dept values(NULL,'LOGISTICS','SINGAPORE');
exception
when e_insert_excep then insert into dept(deptno) select max(deptno)+1 from dept;
dbms_output.put_line(sqlerrm);
end;

标签: sqloracleplsql

解决方案


如果这是您要求的,您可以INSERT ... SELECT ...多列。

...
INSERT INTO dept
            (deptno,
             <the other targeted columns>)
            SELECT max(deptno) + 1,
                   'LOGISTICS',
                   'SINGAPORE'
                   FROM dept;
...

但最好使用自动递增的 ID 定义表。看看这个问题以了解如何实现这一点。


推荐阅读