目录:
一、游标
1.简介
oracle 读取数据的工具,类似java集合。
2.示例
DECLART
-- 获取班级集合
CURSOR EMPLIST IS SELECT * FROM EMP ;
-- 定义emp 表的对象 进行解析
V_EMPOBJ EMP%ROWTYPE;
BEGIN
-- 解析游标(集合)
-- 1. 打开游标。
OPEN EMPLIST;
LOOP
EXIT WHEN EMPLIST%NOTFOUND
FETCH EMPLIST INTO V_EMPOBJ;
dbms_output.put_line(v_empobj.empno||v_empobj.ename);
END LOOP;
-- 2. 关闭游标
CLOSE EMPLIST;
END
3.简化版
DECLARE
CURSOR GLIST IS SELECT * FROM GRADE;
BEGIN
FOR g IN GLIST LOOP
dbms_output.put_line(g.gid);
END LOOP;
END
二、事务
1.一个程序是否健壮,主要看异常处理机制
2.异常
- oracle 一共定义有2万个错误。
- 预定义错误 弹窗 终止程序运行。
- 处理异常。
EXCEPTION
WHEN
TOO_MANY_ROWS
THEN
dbms_output.put_line('返回条数过多,不能赋值');
WHEN
NO_DATA_FOUND
THEN
dbms_output.put_line('要查找的数据不存在');
- 自定义异常。
-- 如果有员工工资小于1000 抛出异常提示。
DECLARE
CURSOR emplist IS SELECT * FROM EMP ;
-- 1. 定义异常
SAL_TOO_LOW EXCEPTION;
BEGIN
FOR e IN emplist LOOP
IF e.sal < 1000 THEN
-- 2. 引发异常
RAISE SAL_TOO_LOW;
END IF;
END LOOP;
-- 3. 接收并处理异常
EXCEPTION
WHEN SAL_TOO_LOW THEN
dbms_output.put_line('有员工工资太低');
raise_application_error(-20001,'工资过低,请及时涨工资');
//错误信息标号 必须小于 -20000
END
- 其他异常
所有未拦截的异常都应该被others接收
WHEN OTHERS THEN
dbms_output.put_line('所有未拦截的异常');
空白R拦截顺序
先是预定义 再是自定义 最后是others
三、存储过程
存储过程是一个有名字的 plsql 块
1. 示例
//-->根据员工编号给指定员工涨工资,并打印相关信息。
create or replace procedure updateempbyempno(
eno emp.empno%type //没有;
) as
--声明变量的地方
a_sal emp.sal%type ; --涨工资之前
b_sal emp.sal%type;--涨工资之后
begin
select sal into a_sal from emp