Oracle存储过程:数据操作与异常处理
"Oracle存储过程是数据库中用于封装SQL语句和PL/SQL代码的预编译程序单元,常用于执行复杂的业务逻辑。本示例展示了如何创建、修改和使用Oracle存储过程,包括数据的增删改操作以及异常处理。" 在Oracle数据库中,存储过程是一种重要的功能,它允许开发人员将一组相关的SQL语句和控制结构组合在一起,形成一个可重用的模块。这有助于提高代码的组织性和效率。以下是对标题和描述中提到的知识点的详细解释: 1. 创建存储过程: - 使用`CREATE OR REPLACE PROCEDURE`语句创建新的或替换已存在的存储过程。例如,`FIRE_EMPLOYEE`存储过程接受一个参数`p_empno`,用于指定员工编号。 - 存储过程内部可以包含变量声明,如`v_ename`,用于存储查询结果。 - 在存储过程中,可以使用`SELECT INTO`语句将查询结果赋值给变量,例如`SELECT ename INTO v_ename FROM emp WHERE empno = p_empno`。 2. 数据操作: - `INSERT INTO`语句用于向表中插入新数据,如`INSERT INTO FORMER_EMP(EMPNO, ENAME) VALUES(p_empno, v_ename)`。 - `DELETE FROM`语句用于从表中删除数据,如`DELETE FROM emp WHERE empno = p_empno`。 - `UPDATE`语句用于更新表中的数据,如`UPDATE former_emp SET date_deleted = SYSDATE WHERE empno = p_empno`。 3. 异常处理: - 使用`EXCEPTION`关键字来捕获和处理可能出现的错误。在`FIRE_EMPLOYEE`存储过程中,当没有找到匹配的员工时,会触发`NO_DATA_FOUND`异常,然后执行`DBMS_OUTPUT.PUT_LINE('EmployeeNumberNotFound!')`打印错误信息。 4. 其他示例: - `sp_add_stu`存储过程演示了如何在插入数据前进行检查和逻辑判断。例如,它会检查类ID是否存在,如果不存在则创建一个新的班级。 - 使用`SUBSTR`函数和`TRIM`函数对输入的学生姓名进行处理,确保其符合规定的长度。 - 使用`COUNT(*)`函数统计查询结果的数量,以判断类ID是否有效。 - `IF...THEN`结构用于根据条件执行不同的操作,如在类ID不存在时创建新类。 - `COMMIT`语句用于提交事务,确保数据库中的更改得以保存。 5. 调用存储过程: - 可以通过SQL命令(如`CALL sp_add_stu(800, 'С', 88);`)直接在SQL*Plus中调用存储过程。 - 也可以通过JDBC(Java Database Connectivity)在Java应用程序中调用存储过程,例子中展示了如何设置参数并执行存储过程。 Oracle存储过程是数据库编程的重要组成部分,它们允许开发者高效地组织和执行复杂的数据库操作,并提供了一种方式来封装和管理业务逻辑。通过了解和掌握存储过程的创建、使用以及异常处理,开发者能够更有效地管理Oracle数据库。
AS
v_ename EMP.ENAME%TYPE;
BEGIN
SELECT ename INTO v_ename
FROM emp
WHERE empno=p_empno;
INSERT INTO FORMER_EMP(EMPNO,ENAME)
VALUES (p_empno,v_ename);
DELETE FROM emp
WHERE empno=p_empno;
UPDATE former_emp
SET date_deleted=SYSDATE
WHERE empno=p_empno;
EXCEPTION
WHEN NO_DATA_FOUND THEN
DBMS_OUTPUT.PUT_LINE('Employee Number Not Found!');
END
存储过程:
・添加学生,如果班级不存在,则先添加班级信息,再添加学生。
create or replace procedure sp_add_stu
(
p_s_name t_stu.s_name%type,
p_c_id t_class.c_id%type
)
as
num number;
new_name t_stu.s_name%type;
begin
--处理姓名(如果不从查询结果取值,用 := )
new_name := substr(trim(p_s_name),1,8);
--将查询结果保存到变量,只能用select into
select count(*) into num from t_class c where c.c_id=p_c_id;
if(num=0) then
insert into t_class(c_id,c_name) values(p_c_id,'新班');
end if;
insert into t_stu(s_id,s_name,c_id,s_sex)
values(p_stu_id,new_name,p_c_id,'1');
commit;
dbms_output.put_line('执行完毕');
end;
-----------------在Oracle中调用(无返回值)-----------------
SQL> call sp_add_stu(800,'李小龙',88);
剩余7页未读,继续阅读
- 粉丝: 0
- 资源: 1
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- ASP.NET数据库高级操作:SQLHelper与数据源控件
- Windows98/2000驱动程序开发指南
- FreeMarker入门到精通教程
- 1800mm冷轧机板形控制性能仿真分析
- 经验模式分解:非平稳信号处理的新突破
- Spring框架3.0官方参考文档:依赖注入与核心模块解析
- 电阻器与电位器详解:类型、命名与应用
- Office技巧大揭秘:Word、Excel、PPT高效操作
- TCS3200D: 可编程色彩光频转换器解析
- 基于TCS230的精准便携式调色仪系统设计详解
- WiMAX与LTE:谁将引领移动宽带互联网?
- SAS-2.1规范草案:串行连接SCSI技术标准
- C#编程学习:手机电子书TXT版
- SQL全效操作指南:数据、控制与程序化
- 单片机复位电路设计与电源干扰处理
- CS5460A单相功率电能芯片:原理、应用与精度分析