iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >如何在Oracle数据库中使用游标
  • 237
分享到

如何在Oracle数据库中使用游标

2024-04-02 19:04:59 237人浏览 八月长安
摘要

这篇文章将为大家详细讲解有关如何在oracle数据库中使用游标,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。什么是游标?①从表中检索出结果集,从中每次指向一

这篇文章将为大家详细讲解有关如何在oracle数据库中使用游标,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。

什么是游标?

①从表中检索出结果集,从中每次指向一条记录进行交互的机制。

②关系数据库中的操作是在完整的行集合上执行的。

由 SELECT 语句返回的行集合包括满足该语句的 WHERE 子句所列条件的所有行。由该语句返回完整的行集合叫做结果集。

应用程序,尤其是互动和在线应用程序,把完整的结果集作为一个单元处理并不总是有效的。

这些应用程序需要一种机制来一次处理一行或连续的几行。而游标是对提供这一机制的结果集的扩展。

游标是通过游标库来实现的。游标库是常常作为数据库系统或数据访问 api 的一部分而得以实现的软件,用来管理从数据源返回的数据的属性(结果集)。这些属性包括并发管理、在结果集中的位置、返回的行数,以及是否能够在结果集中向前和/或向后移动(可滚动性)。

游标跟踪结果集中的位置,并允许对结果集逐行执行多个操作,在这个过程中可能返回至原始表,也可能不返回至原始表。

换句话说,游标从概念上讲基于数据库的表返回结果集。

由于它指示结果集中的当前位置 ,就像计算机屏幕上的光标指示当前位置一样,“游标”由此得名。

游标有什么作用?

①指定结果集中特定行的位置。

②基于当前的结果集位置检索一行或连续的几行。

③在结果集的当前位置修改行中的数据。

④对其他用户所做的数据更改定义不同的敏感性级别。

⑤可以以编程的方式访问数据库。

引言

本节对Oracle中的游标进行详细讲解。本节所举实例来源Oracle中scott用户下的emp表dept表:

如何在Oracle数据库中使用游标如何在Oracle数据库中使用游标

一、游标:

1、概念:

游标的本质是一个结果集resultset,主要用来临时存储从数据库中提取出来的数据块。

二、游标的分类:

1、显式游标:

由用户定义,需要的操作:定义游标、打开游标、提取数据、关闭游标,主要用于对查询语句的处理。

属性:%FOUND %NOTFOUND %ISOPEN %ROWCOUNT

Example:打印emp表的员工信息

DECLARE
 CURSOR emp_cursor IS SELECT empno,ename,job FROM emp;
 v_empno emp.empno%TYPE;
 v_name emp.ename%TYPE;
 v_job emp.job%TYPE;
BEGIN
 OPEN emp_cursor;
 LOOP
 FETCH emp_cursor INTO v_empno,v_name,v_job;
 DBMS_OUTPUT.PUT_LINE('员工号为:'||v_empno||'姓名是'||v_name||'职位:'||v_job);
 EXIT WHEN emp_cursor%NOTFOUND;
 END LOOP;
 CLOSE emp_cursor;
END;

如何在Oracle数据库中使用游标

这里严格按照显示游标的书写规则:DECLARE emp_cursor定义游标OPEN emp_cursor打开游标FETCH emp_cursor INTO...提取数据CLOSE emp_cursor关闭游标,因为提取出来的数据属于多行,所以通过loop循环打印即可。

Example2:检验游标是否打开,如果打开显示提取行数

DECLARE
 CURSOR emp_cursor IS SELECT empno,ename,job FROM emp;
 v_empno emp.empno%TYPE;
 v_name emp.ename%TYPE;
 v_job emp.job%TYPE;
BEGIN
 OPEN emp_cursor;
 LOOP
  FETCH emp_cursor INTO v_empno,v_name,v_job;
  EXIT WHEN emp_cursor%NOTFOUND;
 END LOOP;
 IF emp_cursor%ISOPEN THEN
 DBMS_OUTPUT.PUT_LINE('游标已打开');
 DBMS_OUTPUT.PUT_LINE('读取了'||emp_cursor%ROWCOUNT||'行');
 ELSE
 DBMS_OUTPUT.PUT_LINE('游标没有打开');
 END IF; 
 CLOSE emp_cursor;
END;

如何在Oracle数据库中使用游标

通过%ISOPEN属性判断游标是否打开,%ROWCOUNT判断获取行数。

2、隐式游标:由系统定义并为它创建工作区域,并且隐式的定义打开提取关闭,隐式游标的游标名就是'SQL',属性和显示游标相同,主要用于对单行select语句或dml操作进行处理。Example:又用户输入员工号修改员工工资如成功则打印输出成功标志。

为了尽量不改变原表,创建新表emp_new和原表数据相同:

CREATE TABLE emp_new
AS
SELECT * FROM emp;
BEGIN
 UPDATE emp_new SET sal = sal+500 WHERE empno=&empno;
 IF sql%FOUND THEN
 DBMS_OUTPUT.PUT_LINE('成功修改');
 COMMIT;
 ELSE
 DBMS_OUTPUT.PUT_LINE('修改失败');
 ROLLBACK;
 END IF;
END;

如何在Oracle数据库中使用游标

如何在Oracle数据库中使用游标

这里注意增删改以后要对做的操作进行commit提交,如果操作失败则rollback回滚刚才的操作。

3、参数游标:

在定义游标时加入参数的游标,可以配合游标for循环快速找到需要的数据。这里先讲一下游标for循环

A、游标FOR循环:

隐含的执行了打开提取关闭数据,代码精简很多。Expression:

FOR table_record IN table_cursor LOOP

  STATEMENT;

END LOOP;

Example:使用游标For循环打印输出员工信息:

DECLARE
CURSOR emp_cursor IS SELECT empno,ename,job FROM emp;
BEGIN
 FOR emp_record IN emp_cursor LOOP
 DBMS_OUTPUT.PUT_LINE('员工号:'||emp_record.empno||'员工姓名'||emp_record.ename||'员工职位'||emp_record.job);
 END LOOP;
END;

如何在Oracle数据库中使用游标

这里游标FOR循环省去了对于取到的数据的变量的命名和赋值,同时如果全部打印则不用写循环条件,代码精简了很多。

如果想让代码更加精简,则可以去掉对游标的声明引入子查询即可,操作如下。

BEGIN
 FOR emp_record IN (SELECT empno,ename,job FROM emp) LOOP
 DBMS_OUTPUT.PUT_LINE('员工号:'||emp_record.empno||'员工姓名'||emp_record.ename||'员工职位'||emp_record.job);
 END LOOP;
END;

代码更加精简,得到的结果相同。和隐式游标是不是有点像,但隐式游标主要用于的是单行select和dml语句的操作,注意2者用法的区别。

下面继续参数游标的实例:

Example:输入部门号打印员工信息:

DECLARE
CURSOR emp_cursor(dno NUMBER)IS SELECT empno,ename,job FROM emp WHERE deptno=dno;
BEGIN
 FOR emp_record IN emp_cursor(&dno) LOOP
 DBMS_OUTPUT.PUT_LINE('员工号'||emp_record.empno||'姓名'||emp_record.ename||'职位'||emp_record.job);
 END LOOP;
END;

如何在Oracle数据库中使用游标

如何在Oracle数据库中使用游标

这里既然有参数,那么必然会有对游标的声明,在结合游标FOR循环快速超找所需要的数据。

三、使用游标修改数据的注意事项

1、使用游标修改数据时,为防止他人在自己操作数据时对数据进行修改,oracle提供for update子句进行加锁。

同时在你使用update或delete时,必须使用where current of+name_cursor语句,以及在最后记得提交。如果是级联操作则可以使用for update of 来进行相关表的加

Example1:对职位是PRESIDENT的员工加1000工资,MANAGER的人加500工资

CREATE TABLE emp_new
AS
SELECT * FROM emp;
DECLARE
CURSOR empnew_cursor IS SELECT ename,job FROM emp_new FOR UPDATE;
BEGIN
 FOR empnew_record IN empnew_cursor LOOP
 DBMS_OUTPUT.PUT_LINE('姓名'||empnew_record.ename||'职位'||empnew_record.job);
 IF empnew_record.job='PRESIDENT' THEN
  UPDATE emp_new SET sal=sal+1000 WHERE CURRENT OF empnew_cursor;
 ELSIF empnew_record.job='MANAGER' THEN
  UPDATE emp_new SET sal=sal+500 WHERE CURRENT OF empnew_cursor;
 END IF;
 END LOOP;
 COMMIT;
END;

如何在Oracle数据库中使用游标

如何在Oracle数据库中使用游标

关于如何在Oracle数据库中使用游标就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

您可能感兴趣的文档:

--结束END--

本文标题: 如何在Oracle数据库中使用游标

本文链接: https://www.lsjlt.com/news/55413.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 如何在Oracle数据库中使用游标
    这篇文章将为大家详细讲解有关如何在Oracle数据库中使用游标,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。什么是游标?①从表中检索出结果集,从中每次指向一...
    99+
    2024-04-02
  • oracle数据库游标怎么使用
    在Oracle数据库中,游标用于在PL/SQL块中处理多行数据。可以使用游标来检索和操作查询结果集。以下是在Oracle数据库中使用...
    99+
    2023-08-31
    oracle
  • 如何在Oracle数据库中实现动态SQL和游标处理
    在Oracle数据库中,可以通过使用PL/SQL来实现动态SQL和游标处理。以下是一个简单的示例代码,演示了如何使用动态SQL和游标...
    99+
    2024-03-02
    Oracle
  • 如何查看oracle数据库游标内容
    在Oracle中,可以使用`DBMS_SQL`包来获取和查看游标的内容。以下是一种方法:1. 在PL/SQL中,使用`OPEN`语句...
    99+
    2023-09-25
    oracle数据库
  • 在Oracle数据库中如何使用SQL*Plus
    本篇内容介绍了“在Oracle数据库中如何使用SQL*Plus”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成...
    99+
    2024-04-02
  • Oracle游标如何使用
    这篇文章给大家介绍Oracle游标如何使用,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。从游标提取数据   从游标得到一行数据使用FETCH命令。每一次提取数据后,游标都指向...
    99+
    2024-04-02
  • Oracle中如何使用非滚动游标
    这篇文章给大家介绍Oracle中如何使用非滚动游标,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。 #include <stdio.h> #include ...
    99+
    2024-04-02
  • oracle动态游标如何使用
    动态游标是一种可以在运行时根据条件选择不同查询结果的游标。在Oracle中,可以使用PL/SQL语言来创建和使用动态游标。下面是一个...
    99+
    2023-08-24
    oracle
  • oracle数据库如何使用
    Oracle数据库的使用步骤如下:1. 下载和安装Oracle数据库软件。首先,你需要从Oracle官方网站上下载适用于你的操作系统...
    99+
    2023-09-05
    oracle数据库
  • 如何使用oracle数据库
    oracle 数据库是一种强大的 rdbms,具有可扩展性、可靠性和安全性。连接到数据库后,您可以创建数据库、表、插入数据、查询数据、更新数据和删除数据。此外,oracle 数据库还提供...
    99+
    2024-04-19
    oracle access
  • 使用JdbcTemplate流式(游标)读取数据库
    使用JdbcTemplate流式(游标)读取数据库可以通过设置fetchSize属性来实现。fetchSize属性用于指定每次从数据...
    99+
    2023-09-21
    游标
  • oracle游标数据量过大如何处理
    当游标的数据量过大时,可以考虑以下几种处理方式:1. 分批处理:将大数据集划分为多个较小的数据集进行处理。通过设置合理的分批大小,在...
    99+
    2023-09-27
    oracle
  • nacos如何使用oracle数据库
    要在Nacos中使用Oracle数据库,您需要按照以下步骤进行配置: 1、下载Oracle JDBC驱动程序:您需要从Oracle官...
    99+
    2024-04-22
    oracle nacos
  • oracle游标数据量过大如何解决
    当游标的数据量过大时,可以考虑以下几种解决方案: 使用分页查询:将大的查询结果分成多个小的查询结果集,每次只查询部分数据,然后再...
    99+
    2024-02-29
    oracle
  • 如何在HTML5中使用indexedDB 数据库
    如何在HTML5中使用indexedDB 数据库?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。连接数据库一个网站可以有多个 indexedDB 数据库,但每个数据库的名称是唯一...
    99+
    2023-06-09
  • Oracle数据库中如何使用rman命令
    这期内容当中小编将会给大家带来有关Oracle数据库中如何使用rman命令,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。Oracle数据库rman常用命令怎么使用  连接...
    99+
    2024-04-02
  • 如何在Android中使用SQLite数据库
    本篇文章为大家展示了如何在Android中使用SQLite数据库,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。SQLite简介:SQLite是Android系统采用的一种开源的轻量级的关系型的数据库...
    99+
    2023-05-31
    android sqlite 数据库
  • 在ASP中如何使用MYSQL数据库
    这篇文章给大家分享的是有关在ASP中如何使用MYSQL数据库的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。  我的环境是WINDOWS98+PWS4.0+mysql-3.23.3...
    99+
    2024-04-02
  • 如何在 Golang 中使用数据库锁?
    非常抱歉,由于您没有提供文章标题,我无法为您生成一篇高质量的文章。请您提供文章标题,我将尽快为您生成一篇优质的文章。...
    99+
    2024-05-14
  • Oracle数据库中BINARY_FLOAT和BINARY_DOUBLE如何使用
    Oracle数据库中BINARY_FLOAT和BINARY_DOUBLE如何使用,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作