首页 > 编程知识 正文

sql数据库视图怎么创建,mysql存储过程游标

时间:2023-05-05 20:01:27 阅读:120755 作者:1334

sql游标文章目录什么是sql游标? 光标分类1 .显式光标2 .隐式光标3 .光标参数4 .定义光标类型

一个光标是什么?

游标: oracle在执行sql语句时为每个sql语句分配缓冲区。

用于临时存储sql语句和sql语句的结果和参数。

光标是指向该缓冲区的指针(地址),

操作游标可以处理sql的执行结果

布尔型,布尔型:值只有三个。 不能直接打印true、false、null和boolean类型。 只能作为条件使用

光标分类光标分为显式光标和隐式光标。 **

光标属性:

%found :返回布尔型数据。 如果当前光标指向的数据不为空,则返回true;否则返回false

%notfound:和%found相反,如果光标指向的数据为空,则返回true;否则返回false

%isopen:返回布尔类型,如果当前光标打开,则返回true;如果未打开,则返回false

%rowcount:返回光标当前数据的数据行号,以及表示光标指向的结果集中的数据数的数字。

使用光标属性:

光标名称%属性名称

1 .显式游标自行定义要使用的游标。

光标定义:

cursor光标变量名is select语句;

使用光标:

1 .打开光标

open光标变量名称;

使用fetch into语句将光标指向以下数据,并将数据保存在变量中

fetch光标变量into变量;

3 .处理当前变量中的数据(使用循环遍历光标) ) ) ) ) ) ) ) ) )。

4 .关闭光标

close光标变量

用光标打印emp表中的所有员工信息

- -用光标打印EMP表中的所有员工信息declare-- EMP表中的所有信息cursor c_emp is select * from emp; -光标中的记录v_EMP%rowtype; begin --光标open c_emp; --loop循环游标结果集运行loop--fetchinto以获取下一个数据fetch c_emp into v_emp; -确定光标是否为空,如果为空,则循环exit when c_emp%notfound; -当前v_emp变量的数据DBMS _ output.put _ line (c _ EMP % rowcount||,(||v_emp.empno||,(|v_EMP.empno ) ) DBMS _ output.put _ line (c _ EMP % rowcount; -关闭光标close c_emp; 结束; while循环遍历光标

--while循环游标declare --所有员工信息cursor c_emp is select * from emp; -定义保存光标记录v_EMP%rowtype的变量; begin --光标open c_emp; -将光标移动到第一个数据fetch c_emp into v_emp; -光标while c_emp%found loop --处理当前v_emp变量的数据。 DBMS _ output.put _ line (c _ EMP % rowcount|||v _ e mount -将光标移动到以下数据fetch c_emp into v_emp; 结尾环路; -关闭光标close c_emp; 结束; 遍历光标的最简单方法for循环遍历

--遍历游标的最简单方法for环路遍历declare --所有emp表中的数据cursor c_emp is select * from emp; begin for v_emp in c_emp loop --处理当前v_emp变量的数据。 DBMS _ output.put _ line (c _ EMP % rowcount||,v_emp end loop; 结束; 2 .隐式游标隐式游标:系统在执行delete、update和insert语句时自动分配游标。

游标名称为sql,SQL % foundsql % not found SQL % rowcount SQL % is open;

比根

更新EMP set sal=sal 1

00;
dbms_output.put_line(sql%rowcount);
end;

3.游标参数

语法:
cursor 游标名(形参名 参数类型[:=默认值],…) is select语句
select语句中可以使用形参名作为查询条件

使用
打开游标
open 游标名(实参);
传参方式3种
1.传值
2.传变量,将变量的值传给游标
3.按位传值 ,形参名=>值
遍历游标和之间一样
关闭游标
close 游标名;

输入一个部门编号,查询出部门下的所有员工信息

--输入一个部门编号,查询出部门下的所有员工信息declare --声名一个游标变量 cursor cur is select * from emp where deptno=&deptno; --声名一个变量用来保存游标中的一条记录 v_emp emp%rowtype; begin --打开游标 open cur; --遍历游标 loop --将游标指向下一条数据 fetch cur into v_emp; --判断游标是否为空 exit when cur%notfound; --打印员工信息 dbms_output.put_line(v_emp.ename||','||v_emp.job||','||v_emp.sal||','||v_emp.deptno); end loop; --关闭游标 close cur;end; declare --声名一个游标变量 cursor cur(v_dno number:=10) is select * from emp where deptno=v_dno; --声名一个变量用来保存游标中的一条记录 v_emp emp%rowtype; --声名一个变量 v_deptno emp.deptno%type;begin --从键盘输入一个部门编号,存入v_deptno中 v_deptno:=&deptno; --打开游标 open cur(v_deptno); --open cur(10); --遍历游标 loop --将游标指向下一条数据 fetch cur into v_emp; --判断游标是否为空 exit when cur%notfound; --打印员工信息 dbms_output.put_line(v_emp.ename||','||v_emp.job||','||v_emp.sal||','||v_emp.deptno); end loop; --关闭游标 close cur;end; declare --声名一个游标变量 cursor cur(v_dno number:=10) is select * from emp where deptno=v_dno; --声名一个变量用来保存游标中的一条记录 v_emp emp%rowtype; --声名一个变量 -- v_deptno emp.deptno%type;begin --从键盘输入一个部门编号,存入v_deptno中 --v_deptno:=&deptno; --打开游标 open cur; --open cur(10); --遍历游标 loop --将游标指向下一条数据 fetch cur into v_emp; --判断游标是否为空 exit when cur%notfound; --打印员工信息 dbms_output.put_line(v_emp.ename||','||v_emp.job||','||v_emp.sal||','||v_emp.deptno); end loop; --关闭游标 close cur;end; declare --声名一个游标变量 cursor cur(v_dno number:=10) is select * from emp where deptno=v_dno; --声名一个变量用来保存游标中的一条记录 v_emp emp%rowtype; --声名一个变量 -- v_deptno emp.deptno%type;begin --从键盘输入一个部门编号,存入v_deptno中 --v_deptno:=&deptno; --打开游标 open cur(10); --open cur(10); --遍历游标 loop --将游标指向下一条数据 fetch cur into v_emp; --判断游标是否为空 exit when cur%notfound; --打印员工信息 dbms_output.put_line(v_emp.ename||','||v_emp.job||','||v_emp.sal||','||v_emp.deptno); end loop; --关闭游标 close cur; --打开游标 open cur(20); --open cur(10); --遍历游标 loop --将游标指向下一条数据 fetch cur into v_emp; --判断游标是否为空 exit when cur%notfound; --打印员工信息 dbms_output.put_line(v_emp.ename||','||v_emp.job||','||v_emp.sal||','||v_emp.deptno); end loop; --关闭游标 close cur;end; 4.游标类型的定义

定义游标类型语法:
type 类型名 is ref cursor; --声名一个游标类型

声名游标变量
游标变量名 游标类型名;

–游标变量的使用,只能用loop循环或while循环去变量
打开游标变量:
open 游标变量名 for select语句;
遍历和之间一样
关闭游标变量
close 游标变量

游标类型和游标变量,可以动态地指定游标所指向的结果集合

declare --声名一个游标类型 type cur_type is ref cursor; --声名一个游标变量 cur cur_type; --声名一个变量用来保存dept表中的一条记录 v_dept dept%rowtype; --声名一个变量用来保存emp表中的一条记录 v_emp emp%rowtype;begin --查询所有的部门信息 open cur for select * from dept; --遍历游标 loop --将游标指向下一条数据 fetch cur into v_dept; --判断退出条件 exit when cur%notfound; --打印部门信息 dbms_output.put_line(v_dept.deptno||','||v_dept.dname); end loop; --关闭游标 close cur; if cur%isopen then dbms_output.put_line('游标已打开'); end if; --查询所有的员工信息 --打开游标 open cur for select * from emp; --遍历游标 loop --游标指向下一条记录 fetch cur into v_emp; --判断退出条件 exit when cur%notfound; --打印员工信息 dbms_output.put_line(v_emp.ename||','||v_emp.job||','||v_emp.sal||','||v_emp.deptno); end loop; --关闭游标 close cur;end;

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。