Oracle游标

--游标
--今天的任务  3个  
--  1 上节课结尾的时候
-- 函数 没讲完  补一下
-- 2  游标 
--新的学习
-- 3  作业
-- 简单说一下
-- 我基本上没布置过
-- 1 布置作业
-- 2 把所有的上课讲的笔记全部发给你们
-- 3 作业一共12次  全部发给你们  给一周的时间做

--游标
--1 游标的创建
CURSOR SURSOR_name is cudr(语句)
--2 游标的打开
open SURSOR_name;
--3 游标的读取
FETCH SURSOR_name INTO SURSU存储变量
--4 游标的关闭
close SURSOR_name;

-- 注意  这个开关 默认是关闭的
SET SERVEROUTPUT ON

DECLARE
CURSOR SURSOR_student is 
select *
from student;

s student%ROWTYPE;     -- : 创建了一共student的变量s
BEGIN  
--2 游标的打开
open SURSOR_student;
--3 游标的读取
FETCH SURSOR_student INTO s;
--4 游标的关闭
close SURSOR_student;
--打印内容
DBMS_OUTPUT.PUT_LINE('学生姓名:'||s.sname);  --换行打印
DBMS_OUTPUT.PUT_LINE('学生性别:'||s.ssex);  --换行打印
DBMS_OUTPUT.PUT_LINE('学生年龄:'||s.sage);  --换行打印
DBMS_OUTPUT.PUT_LINE('学生学号:'||s.sno);  --换行打印
END;   
/


-- 带loop 的游标

-- 注意  这个开关 默认是关闭的
SET SERVEROUTPUT ON

DECLARE
CURSOR SURSOR_student1 is 
select *
from student;
s student%ROWTYPE;     -- : 创建了一共student的变量s
BEGIN  
--2 游标的打开
open SURSOR_student1;
loop
--3 游标的读取
FETCH SURSOR_student1 INTO s;
exit when SURSOR_student1 %notfound;
--打印内容
DBMS_OUTPUT.PUT_LINE('学生姓名:'||s.sname);  --换行打印
DBMS_OUTPUT.PUT_LINE('学生性别:'||s.ssex);  --换行打印
DBMS_OUTPUT.PUT_LINE('学生年龄:'||s.sage);  --换行打印
DBMS_OUTPUT.PUT_LINE('学生学号:'||s.sno);  --换行打印
end loop;
--4 游标的关闭
close SURSOR_student1;

END;   
/

SET SERVEROUTPUT ON
DECLARE
CURSOR SURSOR_student1 is 
select sname,ssex,sage,sno
from student;
--where sno='s001';
--s student%ROWTYPE;     -- : 创建了一共student的变量s
no varchar2(10) ;
name varchar2(20);
age number(2);
sex varchar2(5);
BEGIN  
--2 游标的打开
open SURSOR_student1;
loop
--3 游标的读取
FETCH SURSOR_student1 INTO name,sex,age,no;
exit when SURSOR_student1 %notfound;
--打印内容
DBMS_OUTPUT.PUT_LINE('学生姓名:'||name);  --换行打印
DBMS_OUTPUT.PUT_LINE('学生性别:'||sex);  --换行打印
DBMS_OUTPUT.PUT_LINE('学生年龄:'||age);  --换行打印
DBMS_OUTPUT.PUT_LINE('学生学号:'||no);  --换行打印
end loop;
--4 游标的关闭
close SURSOR_student1;

END;   
/

/*

SET SERVEROUTPUT ON

DECLARE

CURSOR SURSOR_student1 is 
select sname,ssex,sage,sno
from student;
--where sno='s001';
--s student%ROWTYPE;     -- : 创建了一共student的变量s
-- 创建了游标  这个游标是查询语句


no varchar2(10) ;
name varchar2(20);
age number(2);
sex varchar2(5);

--定义了4个变量用于后面的存储

BEGIN  
--2 游标的打开
open SURSOR_student1;
loop
--3 游标的读取
FETCH SURSOR_student1 INTO name,sex,age,no;


exit when SURSOR_student1 %notfound;
--退出条件  当游标读取为空的时候退出游标的循环读取

--打印内容
DBMS_OUTPUT.PUT_LINE('学生姓名:'||name);  --换行打印
DBMS_OUTPUT.PUT_LINE('学生性别:'||sex);  --换行打印
DBMS_OUTPUT.PUT_LINE('学生年龄:'||age);  --换行打印
DBMS_OUTPUT.PUT_LINE('学生学号:'||no);  --换行打印
end loop;


--4 游标的关闭
close SURSOR_student1;

END;   
/
*/


SET SERVEROUTPUT ON

DECLARE
CURSOR SURSOR_student1 is 
select *
from student;
--where sno='s001';
s student%ROWTYPE;     -- : 创建了一共student的变量s
BEGIN  
--2 游标的打开
open SURSOR_student1;
loop
--3 游标的读取
FETCH SURSOR_student1 INTO s;
exit when SURSOR_student1 %notfound;
--打印内容
DBMS_OUTPUT.PUT_LINE('学生姓名:'||s.sname);  --换行打印
DBMS_OUTPUT.PUT_LINE('学生性别:'||s.ssex);  --换行打印
DBMS_OUTPUT.PUT_LINE('学生年龄:'||s.sage);  --换行打印
DBMS_OUTPUT.PUT_LINE('学生学号:'||s.sno);  --换行打印
end loop;
--4 游标的关闭
close SURSOR_student1;

END;   
/


-- 使用 cursor for loop 循环读取游标的信息
DECLARE
CURSOR SURSOR_student1 is 
select *
from student;
--where sno='s001';
BEGIN  
for i in SURSOR_student1 loop
DBMS_OUTPUT.PUT_LINE('学生姓名:'||i.sname);  --换行打印
DBMS_OUTPUT.PUT_LINE('学生性别:'||i.ssex);  --换行打印
DBMS_OUTPUT.PUT_LINE('学生年龄:'||i.sage);  --换行打印
DBMS_OUTPUT.PUT_LINE('学生学号:'||i.sno);  --换行打印
END loop;
END;   
/


-- 带参数的游标

SET SERVEROUTPUT ON

DECLARE
no student.sno%type:= 's005';
s student%ROWTYPE;     -- : 创建了一共student的变量s

CURSOR SURSOR_student(v_sno varchar2)  --括号里面是形参内容
is 
select *
from student
where sno = v_sno;

BEGIN  
--2 游标的打开
open SURSOR_student(no);
--3 游标的读取
FETCH SURSOR_student INTO s;
--4 游标的关闭
close SURSOR_student;
--打印内容
DBMS_OUTPUT.PUT_LINE('学生姓名:'||s.sname);  --换行打印
DBMS_OUTPUT.PUT_LINE('学生性别:'||s.ssex);  --换行打印
DBMS_OUTPUT.PUT_LINE('学生年龄:'||s.sage);  --换行打印
DBMS_OUTPUT.PUT_LINE('学生学号:'||s.sno);  --换行打印
END;   
/


-- 带参数的循环游标

DECLARE
no student.sno%type:= 's00%';
s student%ROWTYPE;     -- : 创建了一共student的变量s

CURSOR SURSOR_student(v_sno varchar2)  --括号里面是形参内容
is 
select *
from student
where sno like v_sno;

BEGIN  
for i in SURSOR_student(no) loop
DBMS_OUTPUT.PUT_LINE('学生姓名:'||i.sname);  --换行打印
DBMS_OUTPUT.PUT_LINE('学生性别:'||i.ssex);  --换行打印
DBMS_OUTPUT.PUT_LINE('学生年龄:'||i.sage);  --换行打印
DBMS_OUTPUT.PUT_LINE('学生学号:'||i.sno);  --换行打印
END loop;
END;   
/

SET SERVEROUTPUT ON
DECLARE
vv_no varchar2(10):='s00%';
vv_sex varchar2(5):='男';
CURSOR SURSOR_student1 (v_no varchar2,v_sex varchar2)
is 
select sname,ssex,sage,sno
from student
where sno like v_no and
      ssex=v_sex;
--s student%ROWTYPE;     -- : 创建了一共student的变量s
no varchar2(10) ;
name varchar2(20);
age number(2);
sex varchar2(5);
BEGIN  
--2 游标的打开
open SURSOR_student1(vv_no,vv_sex);
loop
--3 游标的读取
FETCH SURSOR_student1 INTO name,sex,age,no;
exit when SURSOR_student1 %notfound;
--打印内容
DBMS_OUTPUT.PUT_LINE('学生姓名:'||name);  --换行打印
DBMS_OUTPUT.PUT_LINE('学生性别:'||sex);  --换行打印
DBMS_OUTPUT.PUT_LINE('学生年龄:'||age);  --换行打印
DBMS_OUTPUT.PUT_LINE('学生学号:'||no);  --换行打印
end loop;
--4 游标的关闭
close SURSOR_student1;

END;   
/

DECLARE
no student.sno%type:= 's00%';
sex student.ssex%type:='女';
s student%ROWTYPE;     -- : 创建了一共student的变量s

CURSOR SURSOR_student(v_sno varchar2,v_ssex varchar2)  --括号里面是形参内容
is 
select *
from student
where sno like v_sno and ssex=v_ssex;

BEGIN  
for i in SURSOR_student(no,sex) loop
DBMS_OUTPUT.PUT_LINE('学生姓名:'||i.sname);  --换行打印
DBMS_OUTPUT.PUT_LINE('学生性别:'||i.ssex);  --换行打印
DBMS_OUTPUT.PUT_LINE('学生年龄:'||i.sage);  --换行打印
DBMS_OUTPUT.PUT_LINE('学生学号:'||i.sno);  --换行打印
END loop;
END;   
/

--隐式游标

DECLARE
no student.sno%type:= 's001';
--sex student.ssex%type:='女';
s student%ROWTYPE;     -- : 创建了一共student的变量s

BEGIN  
select * 
into s
from student
where sno = no;
--where sno like no and ssex=sex;
if SQL%found then
DBMS_OUTPUT.PUT_LINE('学生姓名:'||s.sname);  --换行打印
DBMS_OUTPUT.PUT_LINE('学生性别:'||s.ssex);  --换行打印
DBMS_OUTPUT.PUT_LINE('学生年龄:'||s.sage);  --换行打印
DBMS_OUTPUT.PUT_LINE('学生学号:'||s.sno);  --换行打印
end if;
END;   
/


%found  -- 更删改查是否影响到数据     判断sql 是否执行成功
%notfound  -- 判断sql 语句是否执行失败
每个人都是在努力的路上,别因为别人的误解而放弃,,术业有专攻,如是而已。
原文地址:https://www.cnblogs.com/16699qq/p/13153490.html