首页 > 解决方案 > 通过在 PL/SQL 中引发异常来插入详细信息的过程

问题描述

我想创建一个将员工详细信息插入员工表的过程。在插入之前,请检查员工年龄是否符合条件。员工年龄应为 18 岁或以上。值作为参数传递给过程。如果年龄有效,则将员工记录插入表中并打印消息“年龄有效 - 记录已插入”,否则通过引发异常打印消息“年龄无效 - 记录未插入”。表:员工

Column name   Data type      Constraints

EMP_ID        NUMBER(5)      PK

EMP_NAME      VARCHAR2(25)   NOT NULL

AGE           NUMBER(3)

功能要求:

PROCEDURE CHECK_AGE_ELIGIBILITY(

 v_id IN EMPLOYEE.EMPID%TYPE, 

 v_name IN EMPLOYEE.EMPNAME%TYPE, 

 v_age IN EMPLOYEE.AGE%TYPE)

我为此编写了一个代码-

set serveroutput on;
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) 
is emp_rec employee%rowtype;
declare
Employee_age number;
BEGIN
SELECT trunc(MONTHS_BETWEEN(TO_DATE(sysdate,'DD-MON-YYYY'), TO_DATE(:new.DATE_OF_BIRTH,'DD-MON-YYYY'))/12)
INTO Employee_age FROM DUAL;
IF (Employee_age >= 18) THEN
update employee;
dbms_output.put_line('Age valid - Record inserted');
else
dbms_output.put_line('Age invalid - Record not inserted');
END IF;
end;
/

请检查是否有任何错误,因为我的代码编辑器没有显示此代码的任何输出。提前致谢!

标签: oracleplsql

解决方案


你把它复杂化了。那里没有“出生日期”;您正在处理年龄(大概以年表示)。

所以:程序:

SQL> create or replace procedure check_age_eligibility
  2    (par_id       in employee.emp_id%type,
  3     par_emp_name in employee.emp_name%type,
  4     par_age      in employee.age%type
  5    )
  6  is
  7  begin
  8    if par_age >= 18 then
  9       insert into employee (emp_id, emp_name, age)
 10         values
 11         (par_id, par_emp_name, par_age);
 12
 13       dbms_output.put_line('Age valid - record inserted');
 14    else
 15      raise_application_error(-20000, 'Age invalid - record not inserted');
 16    end if;
 17  end;
 18  /

Procedure created.

测试:

SQL> set serveroutput on
SQL> exec check_age_eligibility(1, 'Little', 12);
BEGIN check_age_eligibility(1, 'Little', 12); END;

*
ERROR at line 1:
ORA-20000: Age invalid - record not inserted
ORA-06512: at "SCOTT.CHECK_AGE_ELIGIBILITY", line 15
ORA-06512: at line 1


SQL> exec check_age_eligibility(1, 'Foot'  , 20);
Age valid - record inserted

PL/SQL procedure successfully completed.

SQL> select * From employee;

    EMP_ID EMP_NAME                    AGE
---------- -------------------- ----------
         1 Foot                         20

SQL>

推荐阅读