如何解决具有异常处理的过程
创建一个PL / SQL过程以将员工详细信息插入到Employee表中。插入之前,请检查员工年龄是否符合条件。员工年龄应为18岁或以上。值作为参数传递给过程。
如果年龄有效,则将雇员记录插入表中并显示消息“年龄有效-已插入记录”,否则通过引发异常来打印消息“年龄无效-未插入记录”。
coding:
CREATE OR REPLACE PROCEDURE CHECK_AGE_ELIGIBILITY(
v_id IN EMPLOYEE.EMPID%TYPE,v_name IN EMPLOYEE.EMPNAME%TYPE,v_age IN EMPLOYEE.AGE%TYPE)AS
BEGIN
INSERT INTO Employee(EMPID,EMPNAME,AGE)Values(103,'Robert',24);
select age from Employee;
IF AGE >=18
dbms_output.put_line('Age valid -Record inserted');
else
dbms_output.put_line('Age invalid -Record not inserted');
END;
/
EXPECTED OUTPUT:
Age valid -Record inserted
解决方法
您要先检查,然后再检查是否成功(当您的代码执行相反操作时)。我还修复了if
语句的语法,并更改了insert
语句,使其使用过程参数而不是硬编码值。最后,如果您要提出错误,请使用raison_application_error()
而不是put_line()
。
这应该做您想要的:
create or replace procedure check_age_eligibility(
v_id in employee.empid%type,v_name in employee.empname%type,v_age in employee.age%type
)
as
begin
if v_age >=18 then
insert into employee(empid,empname,age)values(v_id,v_name,v_age);
dbms_output.put_line('age valid -record inserted');
else
raise_application_error( -20001,'age invalid - record not inserted' );
end if;
end;
/
尽管这可能不是您要执行的操作,但是请注意,您不需要执行此过程。您可以只使用check
约束:
alter table employee add constraint age_above_18 check(age >= 18);
然后,您可以使用常规insert
语句来填充表-与约束冲突的每一行都会引发错误。
如果要包含用户定义的异常。在过程中声明它。
create or replace PROCEDURE CHECK_AGE_ELIGIBILITY(
v_id IN EMPLOYEE.EMPID%TYPE,v_name IN EMPLOYEE.EMPNAME%TYPE,v_age IN EMPLOYEE.AGE%TYPE) as
not_of_age exception;
begin
if v_age>=18 then
insert into EMPLOYEE(empid,age) values(v_age,v_age);
dbms_output.put_line('Age valid - Record inserted');
else
raise not_of_age;
end if;
exception
when not_of_age then
dbms_output.put_line('Age invalid - Record not inserted');
end;
/
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。