一、PL/SQL异常处理 1、异常的捕捉是从上到下的顺序。 2、异常处理语法为:"EXCEPTION WHEN 异常一[OR 异常二……] THEN 语句 …… WHEN OTHERS THEN 语句",如: SQL>DECLARE v_name emp.ename%TYPE:='&name'; v_job emp.job%TYPE; BEGIN SELECT job INTO v_job FROM emp WHERE ename=v_name; EXCEPTION /*异常处理*/ WHEN NO_DATA_FOUND THEN /*数据不存在时的异常*/ dbms_output.put_line('没有这个员工!'); WHEN TOO_MANY_ROWS THEN /*数据过多时的异常*/ dbms_output.put_line('有多个员工叫SCOTT!'); WHEN OTHERS THEN dbms_output.put_line('其他异常!'); END; 3、WHEN OTHERS一般是最后一条子句,如果前面没有捕捉到的异常都会被这个子句捕捉。 4、非预定义异常:这种异常通常是数据库的错误,这些错误只有错误编号没有错误的异常名称,所以不能直接捕捉,要捕捉需创建一个异常名称,并把名称与错误编号关联起来,如: --捕捉预定义异常 SQL>DECLARE e_emp_remaining EXCEPTION; PRAGMA EXCEPTION_INIT (e_emp_remaining,12292); /*将异常名与错误编号绑定*/ BEGIN DELETE FROM dept WHERE deptno=10; EXCEPTION /*异常处理*/ WHEN e_emp_remaining THEN /*数据不存在时的异常*/ ROLLBACK; dbms_output.put_line('错误码为:'SQLCODE||',错误信息为:'||SQLERRM); /*此处SQLCODE与SQLERRM用来显示当前PL/SQL程序块的错误码和错误信息*/ WHEN OTHERS THEN dbms_output.put_line('其他异常!'); END; 5、用户自定义异常是指当数据库的一些情况不符合用户的业务逻辑规定时,用户人为判断的异常,如人数不能为负数。通过调用RAISE命令捕捉异常,如"IF 字段名 IS NULL THEN RAISE 自定义异常"。 二、PL/SQL程序单元 1、PL/SQL程序单元包括四种:过程(用于执行特定操作和任务);函数(进行复杂计算,返回计算的结果);包(将逻辑上相关的过程和函数组织在一起,便于对PL/SQL程序进行管理);触发器(由 某些事件触发,执行相应操作任务)。 2、过程(PROCEDURE):如果在应用系统中经常需要执行某个操作,可以基于这些操作建立一个过程。 3、创建过程的语法"CREATE [OR REPLACE] PROCEDURE 过程名(参数名) IS 变量、常量声明;",如: --创建过程,注意此处参数的传值类型,可以有三种方式(IN|OUT|IN OUT) SQL>CREATE OR REPLACE PROCEDURE change_salary(v_empno IN NUMBER, v_new_salary IN NUMBER) /*存储过程名称相当于方法名*/ IS v_count NUMBER; BEGIN ………… END; 4、作为IN类型参数传进来的参数,不能在子程序内部进行赋值修改操作; create or replace procedure sp_t(idd in number) is begin idd :=7; end; --这样会报错 5、作为OUT、IN OUT 类型参数传进来的时候,调用的实际参数必须是一个变量,不能直接用常量。 create or replace procedure sp_t(idd in out number) is begin ………… end; --注意看调用 declare id_s number :=3; begin sp_t(id_s); --right sp_t(3); --wrong end; 6、如果在创建过程中提示带有编译错误,可以用SHOW ERROR查看错误信息。 7、存储过程创建之后,直接用"EXEC 过程名(参数值)"调用。 8、在数据字典中查看存储过程"SELECT object_name FROM user_objects WHERE object_type='PROCEDURE'"。查看过程源码"SELECT line,text FROM user_source WHERE name='要查看的存储过程名'"。 9、删除存储过程"DROP PROCEDURE 存储过程名"。 10、两种传参方式,一是按照参数的位置直接传参,二是通过"形参名=>实参名"符号用参数名传参,形参先有值,实参后有值。 11、创建函数(FUNCTION)的语法"CREATE OR REPLACE FUNCTION 函数名(参数名) RETURN 数据类型 IS 变量、常量声明;"。 12、在函数的头部末尾需加入RETURN语句说明函数的返回值类型。 13、函数中不能包含对数据库执行操作的语句,如DML语句,但在执行操作语句时可以调用函数。 14、在PL/SQL程序的执行块中必须至少包含一个有效的RETURN语句,如: --创建函数 SQL>CREATE OR REPLACE FUNCTION tax(v_value IN NUMBER) /*此处传参用法同存储过程*/ RETURN NUMBER IS BEGIN IF v_value<2000 THEN RETURN (v_value*.10); /*必须要返回NUMBER类型的值*/ ELSE RETURN (v_value*.20); END IF; END tax; 15、PL/SQL中自己定义的函数与oracle内置的函数如SUM、ROUND等作用一样,使用方法也一样。 16、在数据字典中查看函数"FUNCTION 函数名 RETURNS NUMBER",查看函数源码同存储过程。 17、删除函数"DROP FUNCTION 函数名"。 三、包 1、包是一组相差的存储过程、函数、变量、常量的集合,作用控制对存储过程、函数、变量、常量的公用与私用的权限。 2、包头的语法结构"CREATE [OR REPLACE] PACKAGE 包头名 {IS|AS} 公开类型定义; 公开变量、常量声明; 公开过程或函数声明; 公开异常声明; 公开游标声明; END 包头名;"。 3、包体的语法结构"CREATE [OR REPLACE] PACKAGE BODY 包体名 AS 私有类型定义; 私有变量、常量声明;私有过程或函数声明; 私有异常声明; 私有游标声明; END 包体名;"。 4、在包头声明的是外部可以调用的过程、函数、变量,也就是包公开的声明。但在包体内定义的过程、函数、变量是只能在包体内可见,这些声明是包体私有的声明。 5、包头必须在包体之前创建,包头必须存在,包体可不存在。 6、调用包内函数,必须"用包名.函数名(参数值)"这种方式。引用别的用户的包中的函数,必须是"用户名.包名.函数名(参数值)",调用过程的使用方式一样。 7、在数据字典中查看包"SELECT object_name FROM user_objects WHERE object_name='包名'",查看包的源码同存储过程。 8、删除包"DROP PACKAGE 包名"。
相关推荐
Oracle 10g PL/SQL 是Oracle数据库系统中用于创建和管理存储过程、函数、触发器等数据库对象的编程语言。本教程旨在为初学者提供一个全面的学习平台,同时也为经验丰富的开发者提供参考资料。PL/SQL是Oracle特有的...
1. **编程能力**:PL/SQL允许编写包含控制结构(如循环、条件语句)和异常处理的程序块,这些块可以存储在数据库中并按需调用,提高了数据库应用的灵活性和复杂性。 2. **数据处理**:通过PL/SQL,用户可以直接对...
3. **异常处理**:在PL/SQL中,异常处理是通过EXCEPTION关键字实现的,用于捕获并处理运行时错误。手册会详细解释如何定义和使用预定义及自定义异常。 4. **数据库操作**:PL/SQL与Oracle数据库紧密集成,可以执行...
例如,在`jbpm.sql`文件中,可能包含了与业务流程管理(BPM)相关的PL/SQL存储过程或函数,用于定义和执行工作流任务。 此外,PL/SQL还支持块的概念,如匿名块,这使得在不创建独立的存储过程或函数的情况下,也能...
Oracle PL/SQL是一种强大的编程语言,它结合了SQL的数据处理能力与PL的程序设计特性,是Oracle数据库系统中用于创建存储过程、函数、触发器和包的主要工具。在这个"Oracle PL/SQL实战(待续)"的主题中,我们将深入...
PL/SQL 的函数与存储过程练习 PL/SQL 的函数与存储过程练习
在Oracle环境中,PL/SQL允许开发者编写存储过程、函数、触发器和包,这些都是数据库级别的程序单元,可以高效地处理大量数据。 1. **存储过程**:存储过程是一组预先编译好的SQL语句,可以在需要时调用,减少了网络...
3. **项目管理**:通过项目管理功能,开发者可以组织和管理数据库对象,如表、视图、存储过程、函数、触发器等,便于团队协作和代码版本控制。 4. **数据操作**:PL/SQL Developer允许直接在界面中查看、插入、更新...
ORACLE PL/SQL是从入门到精通的专业知识,涵盖了数据库开发与管理的多个方面,包括触发器、过程、函数、软件包、异常处理、游标、循环、分支、变量使用、数据库安装等关键知识点。 触发器是数据库中用来保证数据...
块可以是匿名块(即直接在SQL*Plus或其他工具中编写的一次性执行的代码),也可以是存储过程、函数、触发器、包等可重用的程序单元。PL/SQL支持变量、常量、条件语句(如IF-THEN-ELSIF-ELSE)、循环(如FOR、WHILE)...
此匿名块展示了如何使用PL/SQL声明变量、插入数据到表中以及使用`DBMS_OUTPUT`包在屏幕上显示数据。值得注意的是,为了使`DBMS_OUTPUT.PUT_LINE`函数生效,需要确保服务器输出(Server Output)已开启,可通过命令`...
3. **对象浏览器**:可以浏览数据库中的所有对象,如表、视图、存储过程、函数、触发器等,方便管理和操作。 4. **查询工具**:支持SQL查询的执行,可以查看查询结果,进行数据筛选、排序和分组。 5. **调试器**:...
Oracle PL/SQL是一种...书中可能包含各种类型的PL/SQL程序设计技巧,从简单的存储过程和函数到复杂的事务处理和并发控制策略。通过实例学习,你将能够更好地理解和运用这些概念,提升你在Oracle数据库开发中的技能。
* 函数:是命名了的、存储在数据库中的 PL/SQL 程序块。 * 过程:是一种特殊的存储程序,用于实现某些特定的操作。 * 包:是一组相关的 PL/SQL 程序块的集合。 * 触发器:是一种特殊的存储程序,用于自动执行某些...
- **块结构**:PL/SQL程序通常被组织成块,每个块由声明部分、执行部分和异常处理部分组成。 - **子程序**:包括存储过程和函数。这些子程序可以被其他PL/SQL代码调用,实现代码复用和模块化。 - **包**:包是一种...
9. **包(Package)**:包是一种组织PL/SQL对象(如过程、函数、变量)的方式,可以提高代码的封装性和可维护性。 10. **记录类型(Record Types)**:自定义记录类型允许你创建类似于数据库表结构的变量,这对于...
PL/SQL全称为“Procedural Language/Structured Query Language”,它提供了丰富的控制结构和异常处理机制,使得开发者能够编写复杂的数据库操作程序。 **PL/SQL的特点** 1. **集成性**:PL/SQL与Oracle数据库紧密...
8. **存储过程和函数**:在数据库服务器端执行的PL/SQL代码,可以提高性能,减少网络通信,并提供安全性的提升。 9. **索引和性能优化**:了解如何创建和使用索引,以及通过PL/SQL分析和优化SQL查询性能。 10. **...
本章节主要介绍了 PL/SQL 程序设计的基础知识,包括 PL/SQL 的优点、运行 PL/SQL 程序、PL/SQL 块结构、PL/SQL 基本语法、PL/SQL 处理流程、异常处理、游标、存储过程和函数、触发器等。 PL/SQL 的优点包括: * ...
2. **数据库对象管理**:该工具允许用户直接在界面中创建、修改和删除数据库中的表、视图、索引、存储过程、函数、触发器等。这些操作都配有直观的向导,使得数据库管理工作变得简单易行。 3. **调试功能**:PL/SQL...