oracle 游标简单示例

  1.游标的概念以及作用

      游标(Cursor)可以使用户想操作数组一样对查询出来的结果集进行操作,可以形象的看做一个变动的光标,其实际行是一个指针,它在一段Oracle存放数据查询结果集或数据

    操作集的内存中,这个指针可以指向结果集的任何位置。

    分类: 分为静态游标和ref游标(暂不做介绍)。静态游标 又分为 显示游标和隐式游标 ,隐式游标它是被oracle自动管理的 ,不需要详细的去了解只需要 知道怎么用就可以了。

      显示游标:就是我们普遍使用的。就是在使用之前有着明确的定义,一般都会关联数据查询语句,返回一行或多行记录。

      使用步骤:1.声明游标  2.打开游标 3.提取数据 4.关闭游标

    语法结构:简单语法结构如下代码示例    

 1 DECLARE CURSOR cursor_name
 2      --1.声明名为cursor_name 的游标
 3      IS
 4         --与之关联的sql语句
 5        SELECT ID ,NAME ,score FROM TABLE ;
 6          --声明了一个与数据表字段name类型一样的变量myname
 7        myname tablename.name%TYPE;
 8         --声明了一个可以去表中一行记录的变量
 9        myrow tablename%ROWTYPE;
10     BEGIN
11      --2.打开游标
12         OPEN cursor_name;
13      --3.提取数据
14         FETCH CURSOR INTO myrow;
15         dbms_output.put_line(myrow.name||‘---‘||myrow.id);
16
17       --4.关闭游标
18         CLOSE cursor_name;
19     END;   

      通常显示游标提取的数据不会只有一条,所有想遍历其结果集就需使用loop

    下边创建一张简单的数据表,使用loop游标操作数据

1 CREATE TABLE cur_test_student(
2        --创建简单的测试表 id号, 名字 ,分数 ,科目,年龄
3     sid NUMBER(8) PRIMARY KEY,
4     sname VARCHAR2(10) NOT null,
5     score NUMBER(8) NOT null,
6     subject  Varchar2(20),
7     sage NUMBER(8)
8 );

   loop游标示例:

  

 1 DECLARE CURSOR cur_score
 2 --声明游标查询某一科目所有学生的name和score
 3 IS
 4  SELECT sname,score FROM cur_test_student WHERE subject=‘语文‘;
 5     namee cur_test_student.sname%TYPE;
 6     sco cur_test_student.score%TYPE;
 7
 8  BEGIN
 9    OPEN cur_score;
10      LOOP
11      --提取数据保存到两个变量中
12        FETCH cur_score INTO namee,sco;
13        --隐式游标判断当没有数据是退出循环
14        EXIT WHEN cur_score%NOTFOUND;
15        dbms_output.put_line(namee||‘----------‘||sco);
16
17      END LOOP;
18    CLOSE cur_score;
19  END;

  

for循环游标:

  游标for循环是在pl/sql块中使用游标最简单的方式,它简化了对游标的处理。当使用游标for循环时,oracle会隐含的打开游标,提取游标数据并关闭游标。

 1 DECLARE CURSOR cur_score
 2 --声明游标查询某一科目所有学生的name和score
 3 IS
 4  SELECT sname,score FROM cur_test_student WHERE subject=‘语文‘;
 5    BEGIN
 6  FOR student_recode IN cur_score LOOP
 7
 8  dbms_output.put_line(student_recode.sname||‘---‘||student_recode.score);
 9
10   END LOOP;
11  END;

注意两种写发的不同之处:在for循环的游标中没有 打开游标 关闭游标等四部操作,很多工作oracle隐式的帮我们执行了 也不需要判断合适退出等工作。

  这种写法比简单明了。

带参数的游标

  使用游标是可以指定参数,可以传入多个参数 方便多条件查询,在存储过程中也可以方便的使用

  

 1 DECLARE CURSOR cur_score(sub VARCHAR2) IS
 2
 3     SELECT sname ,score FROM cur_test_student WHERE subject=sub;
 4
 5     BEGIN
 6        FOR score_recode IN cur_score(‘语文‘)LOOP
 7
 8         dbms_output.put_line(score_recode.sname||‘---‘||score_recode.score);
 9
10      END LOOP;
11     END;

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

  

    

    

原文地址:https://www.cnblogs.com/gubai/p/9018755.html

时间: 2024-10-10 12:37:35

oracle 游标简单示例的相关文章

在PYTHON中,用cx_Oracle连接ORACLE数据库简单示例

一,在安装的时候,参数有点不一样: python setup.py build install 二,连接数据库,有两种方式,DSN和TNSNAMES方式: #dsn = orcl.makedsn(self.oracle_host, self.oracle_port, self.oracle_sid) #con = orcl.connect(self.oracle_username, self.oracle_password, dsn) con = orcl.connect(self.oracle

Oracle 游标示例,带异常处理

Oracle游标示例一则,带异常处理. DECLARE CURSOR c_dl IS SELECT ID, NSRSBH, WSPZXH, ZXYY_DM, HZRQ, SWJG_DM, GXSJ FROM T_GUOS_ZXXX WHERE gxsj > begin_gxsj; c_row c_dl%ROWTYPE; BEGIN FOR c_row IN c_dl LOOP BEGIN IF (c_row.GXSJ > max_gxsj) THEN BEGIN max_gxsj := c_r

一则简单示例看Oracle的“无私”健壮性

Oracle的强大之处就在于他能总帮助让你选择正确的执行计划,即使你给了它错误的指示. 实验: 1. 创建测试表: 收集统计信息: 创建B树索引: 2. 执行select id from tbl_plan;查看它的执行计划: 因为创建了B树索引,正常讲可以从索引中获得id的值,不用全表扫描,但这里使用了全表扫描的方式. 即使使用了HINT,这依旧使用的是全表扫描: 原因在于这是个B树索引,不会存储NULL值,尽管这张表没有NULL值.如果直接从可能包含NULL值的B树索引中查询记录,NULL值不

ORACLE游标循环【转】

ORACLE游标循环有几种用法,下面分别介绍一下. 首先定义游标和变量 CURSOR C1 IS SELECT  eNAME,ejob FROM emp WHERE deptno=10; v_NAME VARCHAR2(10); v_job VARCHAR2(10); 第一种:使用loop 循环 open c1; loop fetch c1 into v_name,v_job ; exit when c1%notfound; …… end loop colse c1; 这里需要注意,exit w

[转载]oracle游标概念讲解

原文URL:http://www.2cto.com/database/201203/122387.html ORACLE游标概念讲解 什么是游标?  ①从表中检索出结果集,从中每次指向一条记录进行交互的机制.      ②关系数据库中的操作是在完整的行集合上执行的.   由SELECT 语句返回的行集合包括满足该语句的WHERE 子句所列条件的所有行.由该语句返回完整的行集合叫做结果集.      应用程序,尤其是互动和在线应用程序,把完整的结果集作为一个单元处理并不总是有效的.      这些

AMQP消息队列之RabbitMQ简单示例

前面一篇文章讲了如何快速搭建一个ActiveMQ的示例程序,ActiveMQ是JMS的实现,那这篇文章就再看下另外一种消息队列AMQP的代表实现RabbitMQ的简单示例吧.在具体讲解之前,先通过一个图来概览下: 1.添加Maven依赖 <!-- rabbitmq begin --> <dependency> <groupId>org.springframework.amqp</groupId> <artifactId>spring-rabbit

HMM的维特比算法简单示例

今天读了一位大牛的关于HMM的技术博客,读完之后,写了一个关于维特比算法的简单示例,用scala和java语言混合编写的.现在上传之. package com.txq.hmm import java.utilimport scala.collection._ /** * HMM维特比算法,根据显示状态链条估计隐式链条 * @param states 隐式states * @param observations 显式states * @param start_probability 初始概率向量

spring-servlet.xml简单示例

spring-servlet.xml简单示例 某个项目中的spring-servlet.xml 记下来以后研究用 1 <!-- springMVC简单配置 --> 2 <?xml version="1.0" encoding="UTF-8"?> 3 <beans xmlns="http://www.springframework.org/schema/beans" 4 xmlns:xsi="http://w

Duang!危险的oracle游标

1.引言 SQL是面向集合的语言,其结果一般是集合量(含多条记录),而pl/sql的变量是标量,一组变量一次只能存放一条记录.很多时候查询结果的记录数是不确定的,无法提前声明足够的变量.于是引入了游标的概念,游标使得数据库操作更灵活,但同时也给黑客入侵数据库带来了机会.安华金和数据库安全实验室(DBSec Labs)基于游标的应用原理,本文讨论游标可能带来什么安全隐患以及如何应对这些安全隐患. 2.游标的分类 oracle数据库游标是Pl/sql执行DQL.DML等语句的时候,oracle在内存