`

oracle中游标

阅读更多
1. oracle游标
1) 游标简介
使用游标,我们可以对具体操作数据,比如查询的结果,对行,列数据进行更加细致的处理。以及对其他DML操作进行判断等操作。

2) 显示游标
SQL> set serverout on;
declare cursor cu_emp is select empno,ename,sal from emp;
e_no number;
e_name varchar2(10);
e_sal number;
begin
  open cu_emp;
  fetch cu_emp into e_no,e_name,e_sal;
  while cu_emp%found loop
    dbms_output.put_line('编号:'||e_no||',姓名:'||e_name||',基本薪资:'||e_sal);
    fetch cu_emp into e_no,e_name,e_sal;
  end loop;
  close cu_emp;
end;

使用%type匹配类型
SQL> set serverout on;
declare cursor cu_emp is select empno,ename,sal from emp;
e_no emp.empno%type;
e_name emp.ename%type;
e_sal emp.sal%type;
begin
  open cu_emp;
  fetch cu_emp into e_no,e_name,e_sal;
  while cu_emp%found loop
    dbms_output.put_line('编号:'||e_no||',姓名:'||e_name||',基本薪资:'||e_sal);
    fetch cu_emp into e_no,e_name,e_sal;
  end loop;
  close cu_emp;
end;

使用行,查询要使用*查询要使用*查询
SQL> set serverout on;
declare cursor cu_emp is select * from emp;
e emp%rowtype;
begin
  open cu_emp;
  fetch cu_emp into e;
  while cu_emp%found loop
    dbms_output.put_line('编号:'||e.empno||',姓名:'||e.ename||',基本薪资:'||e.sal);
    fetch cu_emp into e;
  end loop;
  close cu_emp;
end;

带条件查询
SQL> set serverout on;
declare cursor cu_emp is select * from emp where sal>2000 and sal<3000;
e emp%rowtype;
begin
  open cu_emp;
  fetch cu_emp into e;
  while cu_emp%found loop
    dbms_output.put_line('编号:'||e.empno||',姓名:'||e.ename||',基本薪资:'||e.sal);
    fetch cu_emp into e;
  end loop;
  close cu_emp;
end;

3) 隐式游标
隐式游标的属性    返回值类型    意义
SQL%ROWCOUNT    整型    代表DML语句成功执行的数据行数
SQL%FOUND    布尔型    值为true代表插入、删除、更新或单行查询操作成功
SQL%NOTFOUND    布尔型    与SQL%FOUND 属性返回值相反
SQL%ISOPEN    布尔型    DML执行过程中为真,结束后为假

SQL> begin
  if sql%isopen then
     dbms_output.put_line('sql游标已打开');
  else
     dbms_output.put_line('sql游标未打开'); 
  end if;
end;
运行结果:
sql游标未打开

隐式游标rowcount属性
SQL> declare e_count number;
begin
  select count(*) into e_count from emp;
  dbms_output.put_line('游标捕获的记录数:'||sql%rowcount); 
end;
运行结果:
1

使用rowcount判断是否更新
SQL> begin
  update emp set ename='newname' where empno=111;
  if sql%rowcount=1 then
    dbms_output.put_line('已更新');
  else
    dbms_output.put_line('未更新');
  end if;
end;

使用found判断是否更新
SQL> begin
  update emp set ename='newname' where empno=111;
  if sql%found then
    dbms_output.put_line('已更新');
  else
    dbms_output.put_line('未更新');
  end if;
end;

4) 动态游标
强类型动态游标
job='PRESIDENT'或者job='PRESIDENT1'
SQL> declare type emptype is ref cursor return emp%rowtype;
cu_emp emptype;
e_count number;
e emp%rowtype;
begin
  select count(*) into e_count from emp where job='PRESIDENT1';
  if e_count=0 then
    open cu_emp for select * from emp;
  else
    open cu_emp for select * from emp where job='PRESIDENT';
  end if;
  fetch cu_emp into e;
  while cu_emp%found loop
    dbms_output.put_line('编号:'||e.empno||',姓名:'||e.ename||',基本薪资:'||e.sal);
    fetch cu_emp into e;
  end loop;
  close cu_emp;
end;

弱类型动态游标
job='PRESIDENT'或者job='PRESIDENT1'
SQL> declare type customType is ref cursor;
e_count number;
e emp%rowtype;
s salgrade%rowType;
cType customType;
begin
  select count(*) into e_count from emp where job='PRESIDENT1';
  if e_count=0 then
    open cType for select * from salgrade;
    fetch cType into s;
    while cType%found loop
      dbms_output.put_line('等级:'||s.grade||',最低薪资:'||s.losal||',最高工资:'||s.hisal);
      fetch cType into s;
    end loop;
    close cType;
  else
    open cType for select * from emp where job='PRESIDENT';
    fetch cType into e;
    while cType%found loop
      dbms_output.put_line('编号:'||e.empno||',姓名:'||e.ename||',基本薪资:'||e.sal);
      fetch cType into e;
    end loop;
    close cType;
  end if;
end;
分享到:
评论

相关推荐

    oracle中游标的使用

    Oracle游标是数据库管理系统中的一种重要机制,它允许我们逐行处理查询结果,尤其是在面对返回多行记录的SQL语句时。游标提供了一种控制流的方式,让我们能够按需处理每一行数据,而无需一次性加载所有数据到内存中...

    Oracle中游标Cursor基本用法详解

    以上就是Oracle中游标的基本用法。通过游标,开发者能够灵活地遍历查询结果,进行复杂的逻辑处理,从而实现更精细的数据操作。在实际开发中,熟练掌握游标的使用是提高代码效率和可维护性的重要手段。

    Oracle企业面试题集锦

    1. **游标的类型**:Oracle中游标分为显示游标和隐式游标。显示游标通过`DECLARE`语句声明,用于执行复杂的查询操作;隐式游标由PL/SQL自动生成,用于简单的查询。 2. **游标的作用**:游标允许用户逐行处理数据,...

    oracle和sql server区别

    Oracle 中游标是以提高速度全部统一的单项游标,可以允许多用户异步读取,而且声明比较简单,就一句 declare cursor 游标名 is select 语句就可以了。 容错机制 -------- SQL 中的错误机制比较复杂,没有提供错误...

    老二牛车在Oracle数据库上构建JAVA应用程序二理论课.pdf

    - 通过实例演示了如何使用存储过程或函数来执行分页查询,强调了Oracle中游标和函数在数据分页处理中的重要性。 整体来看,这些知识点覆盖了Oracle数据库结构定义、数据操作优化、以及Java环境中的数据库编程,非常...

    在Oracle PL/SQL中游标声明中表名动态变化的方法

    Oracle PL/SQL 中游标声明中表名动态变化的方法 在 Oracle PL/SQL 中, quando 声明中表名动态变化是指在游标声明中使用动态表名,而不是硬编码的表名。这是一种灵活的方法,可以根据不同情况选择不同的表名。 在 ...

    oracle考试试题及答案.doc

    * PL/SQL 中游标操作包括声明游标、打开游标、提取游标、关闭游标。 * 游标的数据可以改变。 五、数据库设计 * 数据库设计一般分为三个阶段:概念设计、逻辑设计、物理设计。 * 数据库概念模型主要用于数据库概念...

    oracle试卷及答案

    7. **PL/SQL中游标的可修改性:** - 正确。PL/SQL中的游标可以被更新或修改。 8. **表与数据文件的关系:** - 正确。一个表可以分布在多个数据文件上,而一个数据文件也可以存储多个表的数据。 9. **HAVING子句...

    oracle真题二

    PL/SQL中游标操作包括声明游标、打开游标、提取游标和关闭游标。 数据库中存储的基本对象是数据,数据库系统的核心是DBMS(Database Management System)。关系操作的特点是集合操作,关系代数中五种基本运算是并、...

    高级安装oracle企业版

    Oracle企业版的高级安装涉及多个步骤,包括安装过程、数据库实例创建以及用户的管理。下面将详细阐述这些关键知识点。 首先,我们关注高级安装的选择。在安装Oracle时,选择“高级安装”模式允许用户进行更精细化的...

    Oracle考试题

    1. PL/SQL中游标操作包括打开(OPEN)、提取(FETCH)、关闭(CLOSE)和游标状态检查(%ISOPEN、%NOTFOUND、%FOUND)。 2. Oracle数据库完整性约束类型有NOT NULL(非空约束)、UNIQUE(唯一约束)、PRIMARY KEY...

    navicat中创建存储过程、触发器和使用游标的简单实例(图文)

    在数据库管理中,Navicat是一款常用的图形化工具,它支持多种数据库管理系统,包括MySQL。本文将详细介绍如何在Navicat中创建存储过程、触发器以及使用游标进行数据操作。 1. **存储过程**: 存储过程是一组为了...

    老二牛车第六章理论课游标管理.pdf

    通过对Oracle数据库中游标管理的学习,我们可以更高效地处理查询结果集,从而提高应用程序的性能和灵活性。理解游标的类型及其使用方法对于Oracle数据库开发来说至关重要。希望本章内容能帮助大家更好地掌握这一技术...

    精通SQL--结构化查询语言详解

    17.4 oracle中游标的使用 365 17.4.1 显式游标与隐式游标 365 17.4.2 游标的属性 366 17.4.3 %type、%rowtype定义记录变量 367 17.4.4 参数化游标 368 17.4.5 游标中的循环 369 17.4.6 游标变量 371 17.5 小...

    Inceptor SQL语法.docx

    Inceptor 中游标主要分为静态游标和动态游标,其中静态游标可分为显式游标和隐式游标;动态游标可分为强类型动态游标和弱类型动态游标。 流程控制语句 PL/SQL 中的流程控制语句包括 IF、LOOP、WHILE、FOR、EXIT ...

    精通sql结构化查询语句

    以SQL Server为工具,讲解SQL语言的应用,提供了近500个曲型应用,读者可以随查随用,深入讲解SQL语言的各种查询语句,详细介绍数据库设计及管理,详细讲解存储过程、解发器和游标等知识,讲解了SQL语言在高级语言中...

Global site tag (gtag.js) - Google Analytics