就是一个结果集
CURSOR 光标名 [(参数名 数据类型[,参数名 数据类型])] -- 参数可有可无 IS SELECT 语句; Cursor c1 is select ename where emp使用之前 需要 open c1; (打开光标) 使用完了 需要 close c1; (关闭光标)
从光标中 取一行关键字 fetch Fetch c1 into pename; (取一行到变量中)
Fetch 的作用
把当前指针指向的记录返回将指针指向下一条记录光标的属性
如果这个found能取到数据这个found就是true 否则就是false %found
与上面相反 %notfound
判断光标是否打开 %isopen
影响的行数 不是总行数 (已经取走的数) %rowcount
光标数量的限制 默认的情况下 oracle 数据库只允许打开到 300个光标 修改光标数的限制 alter system set open_ cursors =400 scope=both; scope 的取值 both,memory,spfile memory:只更改当前实例 不更改参数文件 spfile: 只更改参数文件,不更改实力 数据库需要重启 both:以上两个同时做
查询并打印员工的姓名和薪水
Declare Cursor cemp is select ename,sal from emp; (cemp 代表所有姓名薪水的集合) --建议写完上面后立即为光标定义对应的变量 Pename emp.ename%type Psal emp.esal%type; Begin --打开光标 Open cemp; Loop --取一条记录 Fetch cemp into pename,psal; --fetch不一定能取到 Exit when cemp%notfound;(没有取到记录时为true) --打印 Dbms_output.put_line(pname) End loop;带参数的光标
Cursor cemp(dno number) is select ename from emp where deptno = dno; Begin Open cemp(20); Loop事务隔离性 对于oracle Plsql 要考虑事务隔离性
Oracle 默认隔离级别是 read committed 事务的ACID 原子性 一致性 隔离性 持久性 在oracle中 若对于数据有更改的则需要 Commit;