`
liuguofeng
  • 浏览: 453240 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

oracle 游标以及游标变量(1)

阅读更多

ORACLE 游标

一. PL/SQL 是用游标来管理 SQL 的 SELECT 语句的 . 游标是为了处理这些语句而分配的一大块内存 . 它提供了对一个结果集进行逐行处理的能力 , 可看作是一种特殊的指针 . 它与某个查询结果集相关联 , 可以指向结果集的任意位置 , 以便对指定位置的数据进行处理 . 使用它可以在查询数据的同时对数据进行处理 .

二. 游标的分类 : 静态游标和动态游标

   1. 在说明游标分类之前, 先说明一下PL/SQL 的两个操作, 游标属性, 变量属性

SET SERVEROUTPUT ON ;-- 此语句用于开启打印输出功能

DMBS_OUTPUT.PUT_LINE();-- 打印输出并换行.

%FOUND: 判断当前游标是否指向有效的一条行记录. 是则返回TRUE, 否则返回FALSE

%NOTFOUND: 与%FOUND 恰好相反.

%ISOPEN: 判断游标是否打开, 打开则返回TRUE, 否则返回FALSE.

%ROWCOUNT: 判断当前游标在所指向的结果集中提取的行数. 并非所有总记录数

%TYPE: 声明变量的类型与表中的某列的数据类型完全一致.%TYPE 声明有两个好处: 一是你不必知道某列的确切数据类型二是当某列的数据类型改变时不用修改变量的数据类型.

%ROWTYPE: 声明变量的数据类型与表中的行记录数据类型一致. 对于自定义的记录, 则必须声明自己的域.

  2. 静态游标:

静态游标又可以分为两类:

1) 隐式游标

隐式游标的特点:

- 隐式游标是由PL/SQL 来管理的, 即不需要声明游标语句, 也不需要OPEN,FETCH,CLOSE 操作

- 隐式游标中必须要有select cur_name into [ 变量名或其他数据类型]. 此句完成OPEN,FETCH,CLOSE 操作.

- 隐式游标只能返回一行记录, 如果无符合条件的记录将会出现NO_DATA_FOUND 异常. 如果出现多条记录将出现TOO_MANY_ROWS 异常.

- 隐式游标只能用SQL% 判断其游标属性

- 对于任何位置使用SQL%ISOPEN 结果都是FALSE, 隐式游标由PL/SQL 管理

- 对于在隐式游标位置前使用SQL%FOUND 或SQL%NOTFOUND, SQL%ROWCOUNT 结果值是NULL( 不确定值)

示例表:

表名:test

字段名

数据类型

可否为空

id( 序号)

number

N

name( 姓名)

varchar2(20)

N

zym( 专业名)

varchar(40)

Y

cj( 成绩)

number

Y

logdate( 记录日期)

date

Y

EG1: 验证隐式游标的特性

  set serveroutput on;-- 开启输出

declare

  no test.id%type;-- 声明变量no 的数据类型同test 表的id 列一致

  ename test.name%type;

  begin

  if sql%isopen then         -- 判断游标是否打开

  dbms_output.put_line(' cursor is openning');

  else

  dbms_output.put_line('cursor is closed');

  end if;

if sql%notfound then – 判断游标是否指向有效的行

  dbms_output.put_line('no value');

  else

  dbms_output.put_line(no||' '||ename);

  end if;

dbms_output.put_line(sql%rowcount);

dbms_output.put_line('---------------');

 

  select id ,name into no ,ename from test where cj=90;-- 隐式游标必-- 须使用INTO

  dbms_output.put_line(sql%rowcount);

  if sql%isopen then

  dbms_output.put_line(' cursor is openning');

  else

  dbms_output.put_line('cursor is closed');

  end if;

  if sql%notfound then

  dbms_output.put_line('no value');

  else

  dbms_output.put_line(no||' '||ename);

  end if;

  exception

  when no_data_found then

     dbms_output.put_line('no value');

when too_many_rows then

      dbms_output.put_line('too many rows');

  end;

执行结果为:

cursor is closed

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

1

cursor is closed

1001 qbnajj

去掉where 条件时的结果:

cursor is closed

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

too many rows

EG2: 使用%ROWTYPE

declare

  rowtype test%rowtype;

  begin

  select * into rowtype from test where cj=90;

  dbms_output.put_line(rowtype.name||' '||rowtype.cj);

  exception

  when no_data_found then

     dbms_output.put_line('no value');

  when too_many_rows then

      dbms_output.put_line('too many rows');

  end;

执行结果:

qbnajj 90

EG3: 自定义RECORD 数据类型

declare

 

  type r_type is record(name test.name%type ,cj test.cj%type);

  re_type r_type;

  begin

  select name,cj into re_type from test where cj=90;

  dbms_output.put_line(re_type.name||' '||re_type.cj);

  exception

  when no_data_found then

     dbms_output.put_line('no value');

  when too_many_rows then

      dbms_output.put_line('too many rows');

  end;

/

执行结果:

qbnajj 90

2) 显示游标

声明语法:

DECLARE

CURSOR cur_name( 参数名 数据类型) is select_satatements ;-- 游标名后-- 可带参数

BEGIN

OPEN cur_name;

FETCH cur_name into [ 变量或者其他数据类型];

-- 可用循环语句迭代输出游标所指向的结果集.

CLOSE cur_name;

END;

显示游标特性:

- 显示游标由用户定义, 并由用户来管理游标, 可返回多行记录.

- 通常使用显示游标需要遵守以下规则

   声明游标 -> 打开游标 -> 读取数据 -> 关闭游标

    但由于FOR IN LOOP 语句包含OPEN,FETCH,CLOSE 操作所以不在此例.

  - 查看游标属性时, 使用cur_name%.

EG:PL/SQL 演示

declare

  no test.id%type;

  ename test.name%type;

  cjs test.cj%type;

  cursor test_cur is

  select id,name from test where cj>=cjs;-- 可通过PL/SQL 绑定变量输-- 入值(&cjs)

  begin

  cjs:=50;

  for t_cur in test_cur

  loop

  no:=t_cur.id;

  ename:=t_cur.name;

  dbms_output.put_line(no||' '||ename);

  end loop;

  end;

执行结果:

chenjunhua 80

qbnajj 90

cjh 52

EG2: 利用带参数的存储过程演示

create or replace procedure test_proce(cjs in test.cj%type)

  as

  no test.id%type;

  ename test.name%type;

  cursor test_cur is

  select id,name from test where cj>=cjs;

  begin

  open test_cur;

  fetch test_cur into no,ename;

  while test_cur%found

  loop

  dbms_output.put_line(no||' '||ename);

  fetch test_cur into no,ename;-- 将游标指向下条记录, 否则为死循环.

  end loop;

  close test_cur;

  end test_proce;

  exec test_proce(50);

执行结果:

chenjunhua 80

qbnajj 90

cjh 52

EG3: 带参数的游标与上面的类似

分享到:
评论

相关推荐

    ORACLE 游标使用示例

    在"游标.txt"文件中,可能包含了更多关于Oracle游标的使用实例和技巧,包括游标的声明、动态游标、游标变量、游标表达式以及游标在存储过程和函数中的应用。这些内容可以帮助你更深入地理解和掌握Oracle游标,提高你...

    Oracle游标使用案例大全

    Oracle游标是数据库编程中非常重要的一个概念,主要用于处理SQL查询的结果集。游标允许我们按行处理数据,逐条读取结果集,而不仅仅是一次性获取所有数据。在Oracle数据库中,游标对于复杂的事务处理、动态SQL以及...

    oracle游标使用大全

    总之,Oracle游标提供了处理查询结果的强大工具,使开发者能够灵活地在PL/SQL中操作数据。无论是隐式还是显式游标,都极大地增强了对数据库的交互能力,使得程序能根据查询结果进行适当的操作。理解并熟练运用游标是...

    Oracle游标使用大全

    ### Oracle游标使用详解 #### 一、Oracle游标简介 在Oracle数据库中,游标是一种重要的机制,用于处理查询结果集。它允许用户通过PL/SQL编程语言逐行访问和处理查询返回的数据记录。游标可以是显式定义的(即在...

    oracle游标使用及实例

    ### Oracle游标使用及实例详解 #### 一、Oracle游标概述 在Oracle数据库中,游标(Cursor)是一种用于处理SQL查询结果集的方式。它允许用户逐行地读取和处理查询结果,这对于需要对每一行数据进行特定操作的情况非常...

    oracle游标使用大全1.txt

    本文详细介绍了Oracle游标的使用方法,包括如何声明、打开游标,如何使用变量与类型匹配,以及如何处理异常情况等。通过这些知识点的学习,读者可以更好地理解和应用Oracle游标,提高开发效率和代码质量。此外,还...

    Oracle 游标使用大全.pdf

    通过本篇Oracle游标的使用大全,我们可以了解到Oracle数据库游标的类型、属性以及如何在PL/SQL中实现对数据集的逐行处理。这不仅有助于提升程序员的编程技能,也能使他们更深入地理解PL/SQL与Oracle数据库之间的交互...

    Oracle游标使用方法及语法大全.doc

    ### Oracle游标使用详解 #### 一、游标概述 游标是Oracle数据库中用于处理查询结果集的强大工具,尤其适用于需要逐行处理查询结果的情况。在Oracle中,游标可以分为两类:**显式游标**和**隐式游标**。 1. **隐式...

    Oracle 游标使用大全

    Oracle游标是数据库管理系统中的一种数据处理机制,它允许用户按需逐行处理查询结果,而不是一次性加载所有数据。在Java编程中,我们通常通过JDBC(Java Database Connectivity)来与Oracle数据库交互,其中游标扮演...

    非常详细的Oracle游标整理

    - 显式游标声明包含游标变量和关联的SQL查询,例如`cursor rowList is select * from chg_test_b b;` - 显式游标有四个关键状态:打开(Open)、关闭(Close)、获取(Fetch)和定位(Fetch into)。 - 在循环中...

    oracle 游标 深入浅出 详解 精析 示例

    Oracle游标是数据库管理系统中的一种重要机制,它允许程序员逐行处理查询结果集,而不仅仅是一次性获取所有数据。游标类似于C语言中的指针,能够灵活、高效地处理多条记录,尤其在需要循环处理或者根据当前行数据做...

    Oracle游标使用方法及语法大全

    Oracle游标是数据库编程中处理多行查询结果的重要工具,尤其在PL/SQL环境中,它允许程序员逐行处理查询结果。游标分为隐式游标和显式游标。 **隐式游标**是由PL/SQL自动管理的,通常在执行SELECT...INTO语句时使用...

    Oracle 游标 Oracle 游标

    ### Oracle游标详解 在Oracle数据库中,游标(Cursor)是处理数据集的一个关键机制,主要用于执行查询并逐行处理结果集。游标可以被视为一个临时存储区,用于保存SELECT语句的结果集,允许程序对这些结果进行迭代...

    多个ORACLE 游标+SQL 游标 小例子+帮助文档

    本教程将深入介绍Oracle和SQL中的游标概念,以及如何通过实例来理解和应用它们。 首先,我们要明白什么是游标。游标(Cursor)是一个数据库系统组件,它允许我们在查询结果集中移动,一次处理一行数据。这在处理...

    oracle 游标使用大全

    在 Declare 步骤中,需要声明游标变量和相应的类型。在 Open 步骤中,需要打开游标,指定游标的查询语句。在 Fetch 步骤中,需要从游标中读取数据。在 Close 步骤中,需要关闭游标,释放系统资源。 四、游标的属性 ...

    oracle数据库游标使用例子

    以下是关于Oracle游标使用的一些关键知识点: 1. **游标的基本概念**: 游标(Cursor)是一种机制,它允许我们遍历和操作由SQL查询返回的结果集。通过游标,我们可以控制数据的读取顺序,一次只处理一行,或者在...

    ORACLE游标与异常处理

    首先,让我们来理解Oracle游标。游标是数据库系统提供的一种机制,允许用户在结果集上进行迭代,一次处理一行数据。在PL/SQL中,游标用于检索SQL查询返回的结果集,并按需逐行处理。以下是一个简单的游标使用示例: ...

Global site tag (gtag.js) - Google Analytics