语句。
例:
declare
cursor empl_dep is
select last_name;department_name from employees;departments
where employees。department_id=departments。department_id;
empl_name employees。last_name %type;
depart_name departments。department_name %type;
begin
open empl_dep;
fetch empl_dep into empl_name;depart_name;
dbms_output。put_line(empl_name ||chr(32)||"work in"||chr(32)||depart_name);
while empl_dep%found loop
fetch empl_dep into empl_name;depart_name;
dbms_output。put_line(empl_name ||chr(32)||"work in"||chr(32)||depart_name);
end loop;
if empl_dep%isopen then
dbms_output。put_line(empl_dep%rowcount);
end if;
close empl_dep;
end;
5。FOR循环的游标使用:
for record_name in cursor_name loop
statement1;
statement2;
。。。。。。
end loop;
游标不需要打开,FETCH和关闭,直接在循环中使用 record_name。col_name(子查询中的
第 86 页,共 106 页
…………………………………………………………Page 87……………………………………………………………
资源来自网络,仅供学习! Oracle 从入门到精通
col_name)就可以。
declare
cursor cur_empl_dep is
select last_name;department_name from employees;departments
where employees。department_id=departments。department_id;
begin
for re_empl_dep in cur_empl_dep loop
dbms_output。put_line(re_empl_dep。last_name||" work in
"||re_empl_dep。department_name);
end loop;
end;
begin
for re_empl_dep in (select last_name;department_name from employees;departments
where employees。department_id=departments。department_id) loop
dbms_output。put_line(re_empl_dep。last_name||" work in
"||re_empl_dep。department_name);
end loop;
end;
6。带参数的游标:
处理串行化数据(一个执行完才能执行下一个)。
CURSOR cursor_name '(parameter_name datatype;。。。。。)'
IS
select_statement;
OPEN cursor_name '(parameter_name datatype;。。。。。)';
限制:不能实现多个游标的并行打开。
例:
declare
cursor dep_cur
(dep_id employees。department_id %type)
is
select employee_id;last_name;department_id from employees
where department_id=dep_id;
begin
for j in 1 。。 5 loop
for i in dep_cur(j*10) loop
dbms_output。put_line(i。employee_id||" : "||i。last_name||" in " ||i。department_id);
end loop;
end loop;
end;
在查询的同时锁定数据:
select 。。。。 from 。。。。 for update 'of column reference' 'nowait';
'nowait' 如果得不到访问资源就立即返回。
如果要使用游标修改数据的话,一定要在游标定义中 SELECT 语句中加上 FOR UPDATE。
第 87 页,共 106 页
…………………………………………………………Page 88……………………………………………………………
资源来自网络,仅供学习! Oracle 从入门到精通
在游标执行过程中的 UPDATE 语句:
UPDATE。。。。SET。。。WHERE CRRENT OF cursor_name;
7。异常处理
异常:在执行过程中出现的错误。
错误触发:语句执行错误(规则)。
显式触发:人为认定的异常,人为规定出现异常的数据范围(逻辑)。
8。预定义异常:
有编号,有名称。使用异常名称扑捉;
NO_DATA_FOUND
TOO_MANY_ROWS
INVALID_CURSOR
ZERO_DIVIDE
DUP_VAL_ON_INDEX 在索引上出现重复数;
exception
when NO_DATA_FOUND then
statement1;
statement2;
。。。。。。。。;
when TOO_MANY_ROWS then
statement1;
statement2;
。。。。。。。。。。。;
when others then
statement1;
statement2;
。。。。。。。。。。。;
9。非预定义异常:
有编号,没名称。需要先定义名称再扑捉;
(1)在 DECLARE 部分定义一个异常的名称; exc_name EXCEPTION;
(2)把名称和异常编号连接起来; PARGMA EXCEPTION_INIT(exc_name;…exc_number);
3、函数:
SQLCODE :返回错误编号
SQLERRM :返回错误信息
写入错误日志的内容: 用户,时间,对象,操作,错误编号,错误信息。
用户定义异常:
(1)命名;
(2)raise关键字在 BEGIN 后触发;
第 88 页,共 106 页
…………………………………………………………Page 89……………………………………………………………
资源来自网络,仅供学习! Oracle 从入门到精通
(3)捕捉;
语法:
exception
when exception1 or exception2 then
statement1;
statement2;
。。。。。。。。;
when exception3 or exception4 then
statement1;
statement2;
。。。。。。。。。。。;
when others then
statement1;
statement2;
。。。。。。。。。。。;
能够判断出的异常放到 WHEN 语句中,将那些无法预测的异常放在 OTHERS 中做成错误日志表。
在程序内部的在程序内部捕捉,程序外部的程序外部捕捉,只有都没捕捉到,才会传到环境中。
抛出异常:
RAISE_APPLICATION_ERROR
RAISE_APPLICATION_ERROR(自定义错误编号,自定义信息);
不会被 EXCEPTION 捕捉到,而是直接回显到界面上给用户看到。
在 EXCEPTION 。。。WHEN 。。。THEN 之前或之中都可以使用。
函数:
不能独立出现,只能作为表达式来使用。
create 'or replace' function fun_name
'(parameter1 'mode' datatype;parameter2 'mode' datatype; 。。。)'
return datetype
is/as
pl/sql block;
只能返回一个且必须有一个返回类型。
在 pl/sql block 中必须有一个可以执行的 RETURN子句。
只允许接受 IN 模式的参数。
函数可以返回 BOOLEAN类型,但不能将返回 BOOLEAN 类型的
小说推荐
- VB2008从入门到精通(PDF格式英文版)
- -Page 1(R)The eXperT’s Voice inBeginningVB 2008From Novice to ProfessionalChristian Gross-Page 2-Page 3-Beginning VB 2008From Novice to Professional■C
- 其他
- 最新章:第214章
- C语言游戏编程从入门到精通(PDF格式)
- -Page 1-Page 2-Page 3-Page 4-Page 5-Page 6-Page 7-Page 8-Page 9-Page 10-Page 11-Page 12-Page 13-Page 14
- 其他
- 最新章:第4章
- VC语言6.0程序设计从入门到精通
- -Page 1-Visual C 6.0 程序设计从入门到精通求是科技 王正军 编著
- 其他
- 最新章:第136章
- SQL 21日自学通(V3.0)(PDF格式)
- -Page 1-SQL 21 日自学通(V1.0 翻译人 笨猪目录目录 1译者的话 14第一周概貌 16从这里开始 16
- 其他
- 最新章:第170章
- 深入浅出MFC第2版(PDF格式)
- -Page 1-Page 2-山高月小山高月小 水落石出水落石出山高月小山高月小 水落石出水落石出-Page 3-深入淺出MFC(第版 使用Visual C 5.0 MFC 4.2)Dissecting MFC(Second Edition Using Visual C 5.0 MFC 4.2)侯俊
- 其他
- 最新章:第309章
- JMS简明教程(PDF格式)
- -Page 1-JMS1.1规范中文版卫建军2007‐11‐22-Page 2
- 其他
- 最新章:第28章
- SQL语言艺术(PDF格式)
- -Page 1-SQLSSQQLL语言艺术内容介绍本书分为12章,每一章包含许多原则或准则,并通过举例的方式对原则进行解释说明。这些例子大多来自于实际案例,对九种SQL经典查询场景以及其性能影响讨论,非常便于实践,为你数据库应用维护人员阅读。资深 SQL 专家 Stéphane Faroult倾力打
- 其他
- 最新章:第27章
- JSP入门教程(DOC格式)
- -Page 1-jsp 入门教程0.0.1版权(c 2008 叮咚老菜鸟叮咚对文档的任何问题或建议,请给叮咚发邮件或留言。QQ:475784337QQ 群:51239192MSN:lingirl6@hotmail.EMAIL:lingirl6@hotmail.2008-02-28 20:05:061
- 其他
- 最新章:第37章
- C语言实例教程(PDF格式)
- -Page 1-前 言Visual C+是开发运行于Windows 95和Windows NT环境下的Win32应用程序的可视化编程工具中最重要的成员之一,它为软件开发人员提供了完整的编辑、编译和调试工具和建立于Win32 API(ApplicationProgramming Interface)基
- 其他
- 最新章:第143章