本文将介绍光标语法、光标属性之一。然后怎么使用光标。然后来个小实例。
光标
语法:
Cursor 光标名[(参数名 数据类型[,参数2 数据类型2]...)]
IS select 语句;
使用步骤:
1.定义光标: cursor
Cursor c1 is select ename from emp;
2.打开光标:open
Open c1;(打开光标执行查询)
3.使用循环语句开始循环光标
3.1可以使用loop循环
4.取一行光标的值:fetch
Fetch c1 into pename; (取出一行数据到变量中)
5.循环退出条件是
exit when %notfound
最后关闭光标:close
Close c1 ;(关闭光标,释放资源)
光标属性:
1:%found
2:%notfound
具体实例:
需求:
1:使用光标查询员工姓名和工资,并打印
代码:
/** 需求: 使用光标打印出每个员工的姓名和薪水 思路: 创建光标 在光标中取数据 打印
光标属性之一 1.1:%fund 发现数据 1.2:%notfund 未发现数据
光标语法: cursor关键字: --1:声明光标 cursor 光标名称 is select 语句; -- 声明接收的变量 2:开始plsql begin 开始
end; 结束
3:打开光标 open 光标名称(1中声明的光标) 4:关闭光标 close 光标名称(1中声明的光标)
5:开始循环光标 使用 loo 或 for或是while都可以
6:取出一条数据 使用关键字 fetch关键字来取出 fetch 光标名称(1中声明的光标) into 到接收的变量(1中声明的) 7:退出条件 exit 光标%notfound; 就是光标未取到数据 8:进行打印 9:结束循环
**/ set serveroutput on declare --声明光标 cursor C1 is select ename,sal from emp; --声明接收的变量 myename emp.ename%type; mysal emp.sal%type; --开始 begin --1:打开光标 open C1; --2:循环光标得到每一个值 使用loop循环 退出条件是 C1%notfound loop --3开始取值 使用的是fetch fetch C1 into myename,mysal; --4退出条件 exit when C1%notfound; --打印获取到的信息 dbms_output.put_line(myename||'的薪水是:'||mysal); end loop; --最后 关闭光标 close C1;
end;
|
运行后结果:
匿名块已完成 SMITH的薪水是:800 ALLEN的薪水是:1600 WARD的薪水是:1250 JONES的薪水是:2975 MARTIN的薪水是:1250 BLAKE的薪水是:2850 CLARK的薪水是:2450 SCOTT的薪水是:3000 KING的薪水是:5000 TURNER的薪水是:1500 ADAMS的薪水是:1100 JAMES的薪水是:950 FORD的薪水是:3000 MILLER的薪水是:1300 |
2:使用光标打印出users表中用户名
代码
--使用光标打印出users表中用户名 set serveroutput on declare cursor U1 is select username from users; myusername users.username%type; begin open U1; loop fetch U1 into myusername; exit when U1%notfound; dbms_output.put_line('用户名是:'||myusername); end loop; close U1; end; |
运行结果:
匿名块已完成 用户名是:KITI 用户名是:JACK 用户名是:TOM
|
————————————————————————————————
完整代码:
/**
需求:
使用光标打印出每个员工的姓名和薪水
思路:
创建光标
在光标中取数据
打印
光标属性之一
1.1:%fund 发现数据
1.2:%notfund 未发现数据
光标语法:
cursor关键字:
--1:声明光标
cursor 光标名称 is select 语句;
-- 声明接收的变量
2:开始plsql begin 开始
end; 结束
3:打开光标 open 光标名称(1中声明的光标)
4:关闭光标 close 光标名称(1中声明的光标)
5:开始循环光标 使用 loo 或 for或是while都可以
6:取出一条数据
使用关键字 fetch关键字来取出
fetch 光标名称(1中声明的光标) into 到接收的变量(1中声明的)
7:退出条件
exit 光标%notfound; 就是光标未取到数据
8:进行打印
9:结束循环
**/
set serveroutput on
declare
--声明光标
cursor C1 is select ename,sal from emp;
--声明接收的变量
myename emp.ename%type;
mysal emp.sal%type;
--开始
begin
--1:打开光标
open C1;
--2:循环光标得到每一个值 使用loop循环 退出条件是 C1%notfound
loop
--3开始取值 使用的是fetch
fetch C1 into myename,mysal;
--4退出条件
exit when C1%notfound;
--打印获取到的信息
dbms_output.put_line(myename||'的薪水是:'||mysal);
end loop;
--最后 关闭光标
close C1;
end;
--使用光标打印出users表中用户名
set serveroutput on
declare
cursor U1 is select username from users;
myusername users.username%type;
begin
open U1;
loop
fetch U1 into myusername;
exit when U1%notfound;
dbms_output.put_line('用户名是:'||myusername);
end loop;
close U1;
end;