本文将介绍光标语法、光标属性之一。然后怎么使用光标。然后来个小实例。
光标
语法:
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;