处理显式游标
来源:互联网 发布:prim和kruskal算法 编辑:程序博客网 时间:2024/05/29 18:51
显式游标处理需四个PL/SQL步骤:
1. 定义/声明游标
就是定义一个游标名,以及与其相对应的SELECT 语句。
语法:
CURSOR cursor_name[(parameter[, parameter]…)] [RETURN datatype]
IS select_statement;
游标参数只能为输入参数,其语法为:
parameter_name [IN] datatype [{:= | DEFAULT} expression]
在指定数据类型时,不能使用长度约束。如NUMBER(4),CHAR(10) 等都是错误的。
[RETURN datatype]是可选的,表示游标返回数据的数据。如果选择,则应该严格与select_statement中的选择列表在次序和数据类型上匹配。
一般是记录数据类型或带“%ROWTYPE”的数据。
2. 打开游标
就是执行游标所对应的SELECT 语句,将其查询结果放入工作区,并且指针指向工作区的首部,标识游标结果集合。
如果游标查询语句中带有FOR UPDATE选项,OPEN 语句还将锁定数据库表中游标结果集合对应的数据行。
语法:
OPEN cursor_name[([parameter =>] value[, [parameter =>] value]…)];
在向游标传递参数时,可以使用与函数参数相同的传值方法,即位置表示法和名称表示法。
PL/SQL 程序不能用OPEN 语句重复打开一个游标。
3. 提取游标数据
就是检索结果集合中的数据行,放入指定的输出变量中。
语法:
FETCH cursor_name INTO {variable_list | record_variable };
执行FETCH语句时,每次返回一个数据行,然后自动将游标移动指向下一个数据行。
当检索到最后一行数据时,如果再次执行FETCH语句,将操作失败,并将游标属性%NOTFOUND置为TRUE。所以每次执行完FETCH语句后,检查游标属性%NOTFOUND就可以判断FETCH语句是否执行成功并返回一个数据行,以便确定是否给对应的变量赋了值。
4. 对该记录进行处理;
5. 继续处理,直到活动集合中没有记录;
6. 关闭游标
当提取和处理完游标结果集合数据后,应及时关闭游标,以释放该游标所占用的系统资源,并使该游标的工作区变成无效,不能再使用FETCH 语句取其中数据。关闭后的游标可以使用OPEN 语句重新打开。
语法:
CLOSE cursor_name;
注:定义的游标不能有INTO 子句。
例一,无参游标
例二,有参游标
1. 定义/声明游标
就是定义一个游标名,以及与其相对应的SELECT 语句。
语法:
CURSOR cursor_name[(parameter[, parameter]…)] [RETURN datatype]
IS select_statement;
游标参数只能为输入参数,其语法为:
parameter_name [IN] datatype [{:= | DEFAULT} expression]
在指定数据类型时,不能使用长度约束。如NUMBER(4),CHAR(10) 等都是错误的。
[RETURN datatype]是可选的,表示游标返回数据的数据。如果选择,则应该严格与select_statement中的选择列表在次序和数据类型上匹配。
一般是记录数据类型或带“%ROWTYPE”的数据。
2. 打开游标
就是执行游标所对应的SELECT 语句,将其查询结果放入工作区,并且指针指向工作区的首部,标识游标结果集合。
如果游标查询语句中带有FOR UPDATE选项,OPEN 语句还将锁定数据库表中游标结果集合对应的数据行。
语法:
OPEN cursor_name[([parameter =>] value[, [parameter =>] value]…)];
在向游标传递参数时,可以使用与函数参数相同的传值方法,即位置表示法和名称表示法。
PL/SQL 程序不能用OPEN 语句重复打开一个游标。
3. 提取游标数据
就是检索结果集合中的数据行,放入指定的输出变量中。
语法:
FETCH cursor_name INTO {variable_list | record_variable };
执行FETCH语句时,每次返回一个数据行,然后自动将游标移动指向下一个数据行。
当检索到最后一行数据时,如果再次执行FETCH语句,将操作失败,并将游标属性%NOTFOUND置为TRUE。所以每次执行完FETCH语句后,检查游标属性%NOTFOUND就可以判断FETCH语句是否执行成功并返回一个数据行,以便确定是否给对应的变量赋了值。
4. 对该记录进行处理;
5. 继续处理,直到活动集合中没有记录;
6. 关闭游标
当提取和处理完游标结果集合数据后,应及时关闭游标,以释放该游标所占用的系统资源,并使该游标的工作区变成无效,不能再使用FETCH 语句取其中数据。关闭后的游标可以使用OPEN 语句重新打开。
语法:
CLOSE cursor_name;
注:定义的游标不能有INTO 子句。
例一,无参游标
create or replace procedure p_test_cusor_noparam is CURSOR c_cursor IS SELECT t.ename, t.sal FROM emp t WHERE rownum < 11; v_ename emp.ename%TYPE; v_sal emp.sal%TYPE;begin OPEN c_cursor; FETCH c_cursor INTO v_ename, v_sal; WHILE c_cursor%FOUND LOOP DBMS_OUTPUT.PUT_LINE(v_ename || '---' || to_char(v_sal)); FETCH c_cursor INTO v_ename, v_sal; END LOOP; CLOSE c_cursor;end p_test_cusor_noparam;
例二,有参游标
create or replace procedure p_test_cusor_hasparam is DeptRec dept%ROWTYPE; Dept_name dept.dname%TYPE; Dept_loc dept.loc%TYPE; CURSOR c1 IS SELECT dname, loc FROM dept WHERE deptno <= 30; CURSOR c2(dept_no NUMBER DEFAULT 10) IS SELECT dname, loc FROM dept WHERE deptno <= dept_no; CURSOR c3(dept_no NUMBER DEFAULT 10) IS SELECT * FROM dept WHERE deptno <= dept_no;begin OPEN c1; LOOP FETCH c1 INTO dept_name, dept_loc; EXIT WHEN c1%NOTFOUND; DBMS_OUTPUT.PUT_LINE(dept_name || '---' || dept_loc); END LOOP; CLOSE c1; OPEN c2; LOOP FETCH c2 INTO dept_name, dept_loc; EXIT WHEN c2%NOTFOUND; DBMS_OUTPUT.PUT_LINE(dept_name || '---' || dept_loc); END LOOP; CLOSE c2; OPEN c3(dept_no => 20); LOOP FETCH c3 INTO deptrec; EXIT WHEN c3%NOTFOUND; DBMS_OUTPUT.PUT_LINE(deptrec.deptno || '---' || deptrec.dname || '---' || deptrec.loc); END LOOP; CLOSE c3;end p_test_cusor_hasparam;
1 0
- 处理显式游标
- Oracle 游标 隐式游标,显示游标,游标循环,动态SELECT语句和动态游标,异常处理,自定义异常
- Oracle游标(一)显式游标
- SQL游标内游标处理
- PL/SQL之隐式游标处理
- oracle 隐式游标,显示游标,游标循环,动态SELECT语句和动态游标,异常处理,自定义异常,
- oracle 隐式游标,显示游标,游标循环,动态SELECT语句和动态游标,异常处理,自定义异常,
- oracle 隐式游标,显示游标,游标循环,动态SELECT语句和动态游标,异常处理,自定义异常
- oracle 隐式游标,显示游标,游标循环,动态SELECT语句和动态游标,异常处理,自定义异常,
- oracle 隐式游标,显示游标,游标循环,动态SELECT语句和动态游标,异常处理,自定义异常,
- oracle 隐式游标,显示游标,游标循环,动态SELECT语句和动态游标,异常处理,自定义异常
- oracle 隐式游标,显示游标,游标循环,动态SELECT语句和动态游标,异常处理,自定义异常
- oracle 隐式游标,显示游标,游标循环,动态SELECT语句和动态游标,异常处理,自定义异常【转载】
- oracle 隐式游标,显示游标,游标循环,动态SELECT语句和动态游标,异常处理,自定义异常【转载】
- oracle 隐式游标,显示游标,游标循环,动态SELECT语句和动态游标,异常处理,自定义异常,
- oracle 隐式游标,显示游标,游标循环,动态SELECT语句和动态游标,异常处理,自定义异常,
- oracle 隐式游标,显示游标,游标循环,动态SELECT语句和动态游标,异常处理,自定义异常,
- oracle 隐式游标,显示游标,游标循环,动态SELECT语句和动态游标,异常处理,自定义异常,
- Light OJ 1283 Shelving Books (区间DP)
- iOS中的屏幕适配之Masonry和SnapKit
- 网站、网页的自身优化--(如何让网站被搜索引擎搜索到)
- hdu_5616_Jam's balance(暴力枚举子集||母函数)
- jquery ajax向spring mvc controller中传值并接受及解析返回值
- 处理显式游标
- java基础/IO流/
- 汽水瓶问题
- PHP如何生成验证码
- java基础概念
- jacascript核心语法————循环结构
- 带权二分图的最佳匹配(KM算法)
- 【java】helloword.java:1: 错误: 类HelloWorld是公共的, 应在名为 HelloWorld.java 的文件中声明
- java学习:log4j输出xml格式的日志文件(log4j2篇)