/********************/
--游标的几种定义方式
--隐式游标
--显示游标
--游标变量
/********************/
--隐式游标1
--这个例子演示了游标属性的用法
--游标属性:%FOUND,%NOTFOUND,%ISOPEN,%ROWCOUNT
--注意COMMIT的位置,如果commit在游标属性之前,游标属性失效
DECLARE
BEGIN
UPDATE emp SET emp.deptno=20 WHERE emp.deptno='20';
--COMMIT;
IF sql%NOTFOUND THEN dbms_output.put_line('没有任何记录');
ELSE dbms_output.put_line(sql%ROWCOUNT);
END IF;
COMMIT;
END;
--隐式游标2
--游标for循环,因为没有显示的定义游标,所以没有open,没有close,也没有fetch into
DECLARE
dep emp.deptno%type;
BEGIN
FOR cur IN (SELECT emp.deptno FROM emp)
LOOP
dbms_output.put_line(cur.deptno);
END LOOP;
--以下写法错误,因为没有显式定义游标,所以fetch into不能使用
/*FOR cur2 IN (SELECT emp.deptno FROM emp)
LOOP
FETCH cur2 INTO dep;
EXIT WHEN cur2%NOTFOUND;
dbms_output.put_line(dep);
END LOOP;*/
END;
--显式游标
DECLARE
CURSOR cur IS SELECT deptno t1,ename t2 FROM emp;
dep emp.deptno%type;
ena emp.ename%type;
BEGIN
--打开游标
OPEN cur;
LOOP
FETCH cur INTO dep,ena;
EXIT WHEN cur%NOTFOUND;
dbms_output.put_line(dep);
dbms_output.put_line(ena);
END LOOP;
dbms_output.put_line('影响'||cur%ROWCOUNT);
--关闭游标
CLOSE cur;
--dbms_output.put_line('影响'||cur%ROWCOUNT);放在这里会错误,因为游标已经关闭
--游标for循环,不需要打开和关闭
FOR r IN cur
LOOP
dbms_output.put_line(r.t1);
dbms_output.put_line(r.t2);
END LOOP;
END;
--游标变量
DECLARE
TYPE curtype IS REF CURSOR;
cur curtype;
dep emp.deptno%type;
ena emp.ename%type;
--顺带演示一下自定义类型
TYPE emptype IS RECORD(
dep emp.deptno%TYPE,
ena emp.ename%TYPE
);
empt emptype;
BEGIN
OPEN cur FOR SELECT deptno t1,ename t2 FROM emp;
LOOP
FETCH cur INTO dep,ena;
EXIT WHEN cur%NOTFOUND;
dbms_output.put_line(dep);
dbms_output.put_line(ena);
END LOOP;
dbms_output.put_line('影响'||cur%ROWCOUNT);
CLOSE cur;
--与上例的区别在于,fetch into 到一个自定义类型的变量
OPEN cur FOR SELECT deptno t1,ename t2 FROM emp;
LOOP
FETCH cur INTO empt;
EXIT WHEN cur%NOTFOUND;
dbms_output.put_line(empt.dep);
dbms_output.put_line(empt.ena);
END LOOP;
dbms_output.put_line('影响'||cur%ROWCOUNT);
CLOSE cur;
END;
总结一下,在查询的时候,隐式游标使用游标for循环,显式游标可可以使用游标for循环也可以open、close,游标变量使用open for,游标变量不和特定的查询结合在一起,例如:open cur for select t.emptno from emp t loop .....end loop; close cur;之后还可以直接写 open cur for select t.ename from emp t loop.....end loop; close cur;。在显式游标和游标变量的情况下,可以用游标名+游标属性的方式来使用游标属性,例如cur%isopen;
相关推荐
本示例展示了如何使用Oracle PL/SQL中的游标来进行数据的分组统计,并通过程序逻辑实现了一种类似“行转列”的效果。这对于初学者来说是非常有价值的实践案例,可以帮助他们更好地理解游标的工作原理及其应用。同时...
该文件讲解了Oracle数据库中函数游标的创建以及包的定义,对数据库有更深层次的了解
游标定义了一个位置,使我们能够指定结果集中特定行的位置,检索一行或多行,修改数据,以及根据需要对数据更改的敏感性进行控制。 游标分为静态游标和REF游标。静态游标包括隐式游标和显示游标。隐式游标是Oracle...
游标算法是一种用于角度测量的算法,特别适用于需要高精度测量的应用场景。它通过对传感器信号的处理,实现对旋转角度的精确测量。该算法的关键在于利用两个不同频率的脉冲信号之间的相位差来计算出角度的变化。 ##...
总之,Oracle游标提供了一种强大而灵活的方式来处理多行查询结果,无论是显式还是隐式,它们都极大地简化了数据处理的复杂性。理解并熟练运用游标对于任何Oracle数据库开发者来说都是非常重要的技能。
创建游标时,游标模式定义了游标位置,共有3种模式:自由、单曲线和多曲线,如图3所示。同一图形中可创建多个游标。 自由模式不考虑曲线的位置,游标可以在整个图形区域自由移动。 单曲线表示仅将游标置于与其...
三、游标的声明方式 游标的声明方式有两种:显示游标和隐式游标。 1. 显示游标:显示游标是使用 cursor...is 语句定义的游标。 2. 隐式游标:隐式游标是在执行插入(insert)、删除(delete)、修改(update)和...
#### 三、显示游标 显示游标是程序员显式定义的游标,通常用于处理多行记录。 ##### 1. 定义与操作步骤 显示游标的使用一般包括四个步骤: 1. **声明游标**:定义游标并指定关联的查询语句。 2. **打开游标**:...
#### 三、静态游标的定义与使用 静态游标的基本定义格式如下: ```plsql DECLARE CURSOR cur_name IS SELECT * FROM table_name WHERE condition; row_variable cur_name%ROWTYPE; BEGIN -- 游标的打开、读取...
游标的使用 游标的使用 游标的使用 游标的使用 游标的使用 不会可以联系我
游标有两种类型:隐式游标和显式游标。在前述程序中用到的SELECT...INTO... 查询语句,一次只能从数据库中提取一行数据,对于这种形式的查询和 DML 操作,系统都会使用一个隐式游标。但是如果要提取多行数据,就要由...
了解orcale的游标的使用 和应用
游标是Oracle数据库中一个重要的概念,它是一种在内存中用于存储SQL查询结果的临时工作区域。使用游标可以方便地访问查询结果集中的每一行,这对于处理大量数据是非常有用的。游标主要分为两种类型:显式游标和隐式...
在MySQL中,游标是一种数据库对象,主要用于处理存储过程中的结果集。游标允许我们逐行地读取查询结果,这对于需要对每一行数据执行特定操作的情况非常有用。通过使用游标,我们可以实现更加灵活的数据处理逻辑。 #...
首先,游标的基本概念是它提供了一种方式来跟踪并控制SQL查询的结果集。在Oracle中,游标有四种状态:未打开、已打开、正在提取和已关闭。以下是一个简单的游标声明和使用的例子: ```sql DECLARE -- 声明变量来...
通过以上示例,我们可以看到游标是一种非常强大的工具,能够帮助我们按需处理查询结果集中的数据。正确地使用游标可以提高程序的灵活性和性能,特别是在处理大量数据时。然而,需要注意的是,游标的使用也会带来一定...
在实际应用中,游标可以用于指定结果集中特定行的位置、基于当前的结果集位置检索一行或连续的几行、在结果集中修改行中的数据、对其他用户所做的数据更改定义不同的敏感性级别、以编程的方式访问数据库等。...
这里定义了一个名为`cur_employee`的游标,它指向了`scott.emp`表中的`empno`, `ename`, 和 `sal`列。 ##### 打开游标 声明完成后,需要通过`OPEN`语句来打开游标: ```sql OPEN cur_employee; ``` 只有打开后的...
1. **声明游标**:定义一个游标并关联到一个查询。 2. **打开游标**:使游标准备好读取数据。 3. **从游标中获取数据**:通常使用`FETCH`命令来获取当前行的数据。 4. **循环处理数据**:使用循环结构来依次处理每一...
第一种是声明一个变量(如`@MyVariable`)并将其与游标关联,然后指定`SELECT`语句来定义游标的内容。第二种方式是先声明游标(如`MyCursor`),不带`@`符号,然后再将变量与游标关联。两种方式最终效果相同,但语法...