我是靠谱客的博主 无奈大船,最近开发中收集的这篇文章主要介绍Oracle-cursor游标和动态游标,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

游标

游标是数据库的一个数据缓冲区,存放SQL语句执行结果。

用于遍历结果集和定位结果集的一条记录。

游标隐性属性

隐性游标属性返回值类型意义
%found布尔型从游标的结果集中获取记录时,找到了记录,为true
%notfound布尔型从游标的结果集中获取记录时,结果集中没有记录,为true
%rowcount整型代表DML语句成功执行的数据行数
%isopen布尔型DML执行过程中为真,结束后为假

声明游标

cursor 游标名称 is select语句

使用游标

for循环使用游标

例:输出emp表中的1004部门的员工 declare

  --声明游标,emp_corsor里面存储了select语句的多行记录

  cursor emp_corsor is select ename,ejob,esalary,ecomn from emp where did='1004';

  --声明变量c_row使用rowtype类型,存储一条记录

  c_row emp_corsor%rowtype;

begin

  --遍历游标emp_corsor,把获取的每一条记录存储到c_row中

  for c_row in emp_corsor loop

    dbms_output.put_line(c_row.ename||'-'||c_row.ejob||'-'||c_row.esalary||'-'||c_row.ecomn);

  end loop;

end;

fetch使用游标

----------必须先要打开游标,用完后需要关闭

打开游标

open 游标名称;

关闭游标

close 游标名称;
declare

    --声明游标,emp_corsor里面存储了select语句的多行记录

  cursor c_emp is select esalary,ecomn from emp where did='1004';

  --声明变量c_row使用rowtype类型,存储一条记录  

  c_row c_emp%rowtype;

begin

  --打开游标

  open c_emp;

  --循环输出数据

  loop

    --将c_emp游标中的记录,提取一行记录到c_row

    fetch c_emp into c_row;

    --%notfound 找不到时候返回ture,找到值返回false

    --结合exit使用,判读是否提取到值,没取到值就退出

    --取到值c_job%notfound 是false

    --取不到值c_job%notfound 是true

    exit when c_emp%notfound;

    dbms_output.put_line(c_row.esalary||'-'||c_row.ecomn);

  end loop;

  --关闭游标

  close c_emp;

end;

动态游标

语法

type 动态游标类型名 is ref cursor;  ---- 声明一个动态游标类型,紫色填写一样内容

游标名 动态游标类型; ---- 声明一个动态游标类型的变量,这个变量就是动态游标类型的,也就是动态游标

open 游标名 for SQL语句; ---- 打开游标,并且把SQL语句和游标关联起来

close 游标名;

遍历tablesp表

--创建过程

create or replace procedure proc_select

is

sql_select varchar(400);

sql_row tablesp%rowtype;

type cur_select is ref cursor; --声明一个动态游标类型,名字叫cur_select,因为游标不是类型所以要声明一个动态游标类型

curs cur_select;  --声明一个动态游标变量,名字叫curs

begin

  sql_select:='select * from tablesp'; -- 需要执行的SQL语句

  open curs for sql_select;    -- 打开游标,并且SQL执行结果存放到curs中

  loop

    fetch curs into sql_row;  -- 把curs中的一条记录赋值为 sql_row

    dbms_output.put_line(sql_row.tid||'-'||sql_row.tname||'-'||sql_row.tage);

    exit when curs%notfound;  -- 退出循环

  end loop;

  close curs;

end;

最后

以上就是无奈大船为你收集整理的Oracle-cursor游标和动态游标的全部内容,希望文章能够帮你解决Oracle-cursor游标和动态游标所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(36)

评论列表共有 0 条评论

立即
投稿
返回
顶部