12.PL_SQL——游标CURSOR

SQL> edit

DECLARE

CURSORc_emp_cursor IS

SELECTemployee_id, last_name

FROMemployees

WHEREdepartment_id = 30;

v_empnoemployees.employee_id%TYPE;

v_lnameemployees.last_name%TYPE;

BEGIN

OPEN c_emp_cursor;

-- 1. 打开游标

LOOP

FETCH c_emp_cursor

                INTOv_empno, v_lname;

-- 2. 取数据

EXIT WHENc_emp_cursor%NOTFOUND;

-- 3. 跳出循环

DBMS_OUTPUT.PUT_LINE(v_empno || ‘ ‘ || v_lname);

END LOOP;

CLOSE c_emp_cursor;

--4. 关闭游标

END;

/

SQL> @notes/s52.sql

114 Raphaely

115 Khoo

116 Baida

117 Tobias

118 Himuro

119 Colmenares

PL/SQL procedure successfully completed.

===================Example1——Records=====================

SQL> edit

DECLARE

CURSOR e IS

SELECT * FROMemployees;

emprec e%ROWTYPE;

BEGIN

OPEN e;

LOOP

FETCH e INTOemprec;

EXIT WHENe%NOTFOUND;

DBMS_OUTPUT.PUT_LINE(‘First Name ==> ‘ || emprec.first_name);

END LOOP;

CLOSE e;

END;

/

SQL> @notes/s53.sql

First Name ==> Donald

First Name ==> Douglas

First Name ==> Jennifer

First Name ==> Michael

First Name ==> Pat

...

First Name ==> Vance

First Name ==> Alana

First Name ==> Kevin

PL/SQL procedure successfully completed.

SQL> edit

DECLARE

CURSORc_emp_cursor IS

SELECTemployee_id, last_name

FROM employees

WHEREdepartment_id = 30;

v_emp_recordc_emp_cursor%ROWTYPE;

BEGIN

OPEN c_emp_cursor;

LOOP

FETCHc_emp_cursor

INTO v_emp_record;

EXIT WHENc_emp_cursor%NOTFOUND;

DBMS_OUTPUT.PUT_LINE(v_emp_record.employee_id || ‘ ‘ ||v_emp_record.last_name);

END LOOP;

CLOSEc_emp_cursor;

END;

/

SQL> @notes/s54.sql

114 Raphaely

115 Khoo

116 Baida

117 Tobias

118 Himuro

119 Colmenares

PL/SQL proceduresuccessfully completed

SQL> edit

DECLARE

CURSORc_emp_cursor IS

SELECTemployee_id, last_name

FROM employees

WHEREdepartment_id = 30;

BEGIN

FOR emp_record INc_emp_cursor

LOOP

DBMS_OUTPUT.PUT_LINE(emp_record.employee_id|| ‘ ‘ ||emp_record.last_name);

DBMS_OUTPUT.PUT_LINE(‘Rowcount ==>‘ || c_emp_cursor%ROWCOUNT);

END LOOP;

END;

/

SQL> @notes/s55.sql

114 Raphaely

Rowcount ==>1

115 Khoo

Rowcount ==>2

116 Baida

Rowcount ==>3

117 Tobias

Rowcount ==>4

118 Himuro

Rowcount ==>5

119 Colmenares

Rowcount ==>6

PL/SQL procedure successfully completed.

Cursor FOR LOOPs Using Subqueries——No need to declare the cursor

SQL> edit

BEGIN

FOR i IN

(SELECTemployee_id, last_name

FROM employees

WHEREdepartment_id = 30)

LOOP

DBMS_OUTPUT.PUT_LINE(i.employee_id || ‘ --> ‘ || i.last_name);

END LOOP;

END;

/

SQL> @notes/s56.sql

114 --> Raphaely

115 --> Khoo

116 --> Baida

117 --> Tobias

118 --> Himuro

119 --> Colmenares

PL/SQL proceduresuccessfully completed

SQL> edit

DECLARE

CURSORc_emp_cursor (deptno NUMBER) IS

SELECTemployee_id, last_name

FROM employees

WHEREdepartment_id = deptno;

v_emp_recordc_emp_cursor%ROWTYPE;

BEGIN

OPEN c_emp_cursor(10);

LOOP

FETCHc_emp_cursor

INTOv_emp_record;

EXIT WHENc_emp_cursor%NOTFOUND;

DBMS_OUTPUT.PUT_LINE( v_emp_record.employee_id || ‘ ‘||v_emp_record.last_name);

END LOOP;

CLOSEc_emp_cursor;

END;

/

SQL> @notes/s58.sql

200 Whalen

PL/SQL proceduresuccessfully completed

================ Example 1 =====================

SQL> edit

DECLARE

TYPE emp_type ISTABLE OF employees%ROWTYPE

INDEX BYPLS_INTEGER;

l_emp emp_type;

l_row PLS_INTEGER;

BEGIN

SELECT * BULKCOLLECT

INTO l_emp

FROM employees;

DBMS_OUTPUT.PUT_LINE(‘The count is: ‘ || l_emp.COUNT);

l_row :=l_emp.FIRST;

WHILE (l_row ISNOT NULL)

LOOP

DBMS_OUTPUT.PUT_LINE(l_row || ‘: ‘ || l_emp(l_row).employee_id || ‘--> ‘ || l_emp(l_row).first_name);

l_row :=l_emp.NEXT(l_row);

END LOOP;

END;

/

SQL> @notes/s60.sql

The count is: 108

1: 198 --> Donald

2: 199 --> Douglas

3: 200 --> Jennifer

4: 201 --> Michael

5: 202 --> Pat

6: 203 --> Susan

================ Example 2 =====================

SQL> edit

DECLARE

CURSOR e IS SELECT* FROM employees;

TYPE emp_type ISTABLE OF e%ROWTYPE

INDEX BYPLS_INTEGER;

l_emp emp_type;

l_row PLS_INTEGER;

BEGIN

OPEN e;

FETCH e BULKCOLLECT INTO l_emp;

CLOSE e;

DBMS_OUTPUT.PUT_LINE(‘The count is: ‘ || l_emp.COUNT);

l_row :=l_emp.FIRST;

WHILE (l_row ISNOT NULL)

LOOP

DBMS_OUTPUT.PUT_LINE(l_row|| ‘: ‘ || l_emp(l_row).employee_id || ‘ --> ‘ || l_emp(l_row).first_name);

l_row :=l_emp.NEXT(l_row);

END LOOP;

END;

/

SQL> @notes/s61.sql

The count is: 108

1: 198 --> Donald

2: 199 --> Douglas

3: 200 --> Jennifer

4: 201 --> Michael

5: 202 --> Pat

时间: 2024-08-07 08:21:41

12.PL_SQL——游标CURSOR的相关文章

SQL Server 数据库的维护(四)__游标(cursor)

--维护数据库-- --游标(cursor)-- --概述: 注:使用select语句查询结果的结果集是一个整体,如果想每次处理一行或一部分行数据,游标可以提供这种处理机制.可以将游标理解为指针.指针指向哪条记录,哪条记录即是被操作记录. 游标处理结果集的方式: 1)允许定位在结果集的指定位置行. 2)从结果集的当前位置检索一行或一部分行记录. 3)支持对结果集当前位置做数据修改.删除等操作. --使用游标 注:使用游标定位和操作数据记录的一般步骤为:声明游标.打开游标.抽取数据.关闭游标和释放

分组PARTITION BY及游标CURSOR的用法

基础数据表: select * from dbo.RecommendationChanelVersionRelation: 数据如下: 要求按照ChannelVersionID分组,对每组中的OrderId根据ID由小到大的顺序,更新为1,2,3,4,5... 方法一(分组PARTITION BY): IF OBJECT_ID('tempdb..#tempdt') IS NOT NULLDROP TABLE #tempdt;select RowNumOrderByChannelVersionID

学习使用MS SQL Server游标(CURSOR)

说实的,使用MS SQL Server这样久,游标一直没有使用过.以前实现相似的功能,都是使用WHILE循环加临时表来实现.刚才有参考网上示例练习写了一下.了解到游标概念与语法.下面代码示例中,先是宣告你在游标中需使用变量,也就是临时存储处理字段的数据.2. 宣告一个游标,并SELECT需要处理的数据集.3. 打开游标(#8行代码).4. 从游标中拿来FETCH NEXT 数据给变量赋值.5. 循环@@FETCH_STATUS = 0条件.6. 在循环块,可以处理第一笔的记录逻辑了.本示例中是P

ORACLE中的游标Cursor总结

游标(Cursor):用来查询数据库,获取记录集合(结果集)的指针,可以让开发者一次访问一行结果集,在每条结果集上作操作. 游标可分为: 1.       静态游标:分为显式(explicit)游标和隐式(implicit)游标. 2.       REF游标:是一种引用类型,类似于指针. 1.静态游标 1.1显式游标 定义格式: CURSOR 游标名 ( 参数 )  IS Select 语句 FOR UPDATE [OF [schema.]table.column[,[schema.]tabl

Android - SQLite游标(Cursor)错误

SQLite游标(Cursor)错误 本文地址: http://blog.csdn.net/caroline_wendy 错误:android.database.CursorIndexOutOfBoundsException:Index -1 requested, with a size of 1 游标(cursor)的起始位置是-1,不能直接使用. 需要cursor.moveToFirst()或cursor.moveToNext()才能指到第一个值.

创建一个新的子元素视图并持有指向数据的游标cursor

android.widget.BaseExpandableListAdapterandroid.widget.CursorTreeAdapterandroid.widget.ResourceCursorTreeAdapter 直接子类SimpleCursorTreeAdapter 类概述一个简单的可扩展的ExpandableListAdapter,通过在XML文件来创建views.你可以指定一个定义了views外观的XML文件. 构造函数public ResourceCursorTreeAdap

MySQL游标(cursor) 定义及使用

概念 游标(Cursor)它使用户可逐行访问由SQL?Server返回的结果集.?使用游标(cursor)的一个主要的原因就是把集合操作转换成单个记录处理方式. 用SQL语言从数据库中检索数据后,结果放在内存的一块区域中,且结果往往是一个含有多个记录的集合. 游标机制允许用户在SQL?server内逐行地访问这些记录,按照用户自己的意愿来显示和处理这些记录. 优点 1.允许程序对由查询语句select返回的行集合中的每一行执行相同或不同的操作,而不是对整个行集合执行同一个操作. 2.提供对基于游

Oracle游标 CURSOR实例详解

作者:gqk 游标 CURSOR: 一.游标概述: 游标(cursor)是数据库系统在内存中开设的一个数据缓冲区,存放SQL语句的执行结果. 每个游标都有一个名字,用户可以用SQL语句逐一从游标中获取记录,并赋给变量做进一步处理. 作用:用于定位结果集的行 和 遍历结果集. 二.游标分类: 显式游标:在前述程序中用到的SELECT...INTO...查询语句,一次只能从数据库中提取一行数据,对于这种形式的查询和DML操作,系统都会使用一个隐式游标 隐式游标:但是如果要提取多行数据,就要由程序员定

PL/SQL 04 游标 cursor

--游标 declare  cursor 游标名字  is  查询语句;begin  其他语句;end; --游标的属性%FOUND%NOTFOUND%ISOPEN%ROWCOUNT(当前游标的指针位移量) --FETCH的两种形式FETCH cursor_name INTO var1, var2, -;FETCH cursor_name INTO record_var; --游标的FETCH循环LOOP  FETCH cursor INTO-  EXIT WHEN cursor%NOTFOUN