oracle - 通过在 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;
/
请检查是否有任何错误,因为我的代码编辑器没有显示此代码的任何输出。提前致谢!
解决方案
你把它复杂化了。那里没有“出生日期”;您正在处理年龄(大概以年表示)。
所以:程序:
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>
推荐阅读
- python - 如何在不需要定义参数的情况下使用 argparse?
- java - RestAssured + Java - 如何保存到字符串或归档发送到服务器的请求?
- tkinter - 在 Tkinter 中扩展 2 个按钮
- python - 提取邮件内容到txt文件
- regex - 正则表达式从 Google Analytics 的登录页面列表中获取特定页面
- kotlin - 具有可为空类型的 BehaviorSubject?
- java - 无法调用“io.micronaut.context.ApplicationContext.getBean(java.lang.Class)”,因为“this.applicationContext”为空
- neo4j - Neo4j - 创建子图 - java.lang.ArrayIndexOutOfBoundsException
- firebase - 如何使用项目列表更新firestore中文档中的地图
- elasticsearch - 了解elasticsearch证书