…
EXCEPTION
WHEN 预定义异常名 THEN
异常处理语句;
WHEN OTHERS THEN
异常处理语句;
END;
→ 当某条语句引发了预定义异常后,程序将转到为此预定义异常编写的异常处理局部执行。
→ 预定义异常: ACCESS_INTO_NULL — 未初始化对象时引发;
→ 预定义异常: COLLECTION_IS_NULL — 给未初始化的对象赋值时引发;
→ 预定义异常: VALUE_ERROR — 对象的值超出大小限制时引发;
→ 预定义异常: INVALID_NUMBER — 将字符串转换为数值时引发;
→ 预定义异常: ZERO_DIVIDE — 以零作为除数时引发;
→ 预定义异常: CASE_NOT_FOUND — CASE语句中的选项与用户输入的数据不匹配时引发;
→ 预定义异常: NO_DATA_FOUND — 表中不存在请求的行、引用已经删除的元素时引发;
→ 预定义异常: TOO_MANY_ROWS — 执行SELECT语句后返回多行时引发;
→ 预定义异常: DUP_VAL_ON_INDEX — 试图将重复的值存储到使用了唯一索引的表中时引发;
→ 预定义异常:CURSOR_ALREADY_OPEN — 试图重新翻开已经翻开的游标时引发;
→ 预定义异常: INVALID_CURSOR — 执行了非法的游标运算时引发;
→ 预定义异常: LOGIN_DENIED — 用户输入的用户名、密码无效时引发;
→ 预定义异常: STORAGE_ERROR — 内存损坏、内存耗尽时引发。
→ 常用函数: SQLCODE〔〕 — 返回异常的代码;
→ 常用函数: SQLERRM〔〕 — 返回异常的信息。
DECLARE
…
自定义异常名 EXCEPTION;
BEGIN
…
RAISE 自定义异常名;
EXCEPTION
WHEN 自定义异常名 THEN
异常处理语句;
END;
→ 声明自定义异常。
→ 人工引发自定义异常。
→ 当人工引发了自定义异常后,程序将转到为此自定义异常编写的异常处理局部执行。
…
EXCEPTION
WHEN 自定义异常名 THEN
RAISE_APPLICATION_ERROR〔异常代码,‘异常信息’〕;
END;
→ 当人工引发了自定义异常后,程序将转到此处输出引发异常的行、异常代码、异常信息。
→ 异常代码 — -20000 ~ -20999 ;
→ 异常信息 — 长度≤2048字节。
游 标
隐式游标
<由数据操纵语句、查询语句隐式声明的游标,用户只能获取此类游标的属性值>
→ 当执行了数据操纵语句、查询语句后影响了一行或多行时,返回TRUE,否那么返回FALSE。
→ 当执行了数据操纵语句、查询语句后没有影响到任何行时,返回TRUE,否那么返回FALSE。
→ 当执行了数据操纵语句、查询语句后影响了一行或多行时,返回所影响的行数,否那么返回0。
→ 如果游标已经翻开,返回TRUE,否那么返回FALSE。
→〔由于执行了数据操纵语句、查询语句后系统会自动关闭隐式游标,所以此属性始终返回FALSE。〕
显式游标
<由用户显式声明的游标,用户可以从此类游标中提取所需的行并进行操作>
→ 在程序的DECLARE声明局部声明显式游标,此游标指向查询语句返回的行。
→〔可以使用 CURSOR 游标名〔参数 数据类型,…〕 IS SELECT语句; 语句中的参数来接收OPEN语句中的参数,
→〔数据类型不能带括号。〕
→ 翻开显式游标。
→〔可以使用 OPEN 游标名〔参数〕; 语句中的参数来接收人工输入的值,并将此值应用于CURSOR语句的SELECT
→〔子语句中。〕
→ 从显式游标中提取一行数据,并将数据存储到指定的变量中,每执行一次此语句,显式游标就向前移动一行。
CURSOR 游标名 IS SELECT语句
FOR UPDATE OF 字段名,…;
→ 声明可以用来删除、修改行的显式游标。
→ 字段名 — 在UPDATE语句中需要使用的字段。
DELETE|UPDATE … WHERE CURRENT OF 游标名;
循环游标
<显式游标的简化使用,此类游标会自动进行翻开、关闭、提取操作>
FOR %ROWTYPE类型的变量名 IN 显式游标名 LOOP
…
END LOOP;
→ 首先自动翻开显式游标,然后自动循环提取显式游标中的全部数据,最后自动关闭显式游标。
REF游标
<此类游标用于在程序运行时动态决定指向某个查询语句返回的行>
TYPE 自定义类型名 IS REF CURSOR;
游标名 自定义类型名;
→ 在程序的DECLARE声明局部声明REF游标。
→ 从REF游标中提取一行数据,并将数据存储到指定的变量中,每执行一次此语句,REF游标就向前移动一行。
评论0
最新资源