oracle 学习(四)游标
- 显式游标
- 隐式游标:如果在PL/SQL程序段中使用SELECT语句进行操作,PL/SQL 会隐含的处理游标定义,即为隐式游标。这种游标不需要像显式那样声明,也不必打开关闭。
CREATE OR REPLACE PROCEDURE CX_XM
(in_xh IN char,out_xm OUT varchar2)
AS
BEGIN
SELECT 姓名 INTO out_xm
FROM XSB
WHERE 学号=in_xh AND ROWNUM=1;
DBMS_OUTPUT.PUT_LINE(out_xm);
END CX_XM;- 注意
- 每一个隐式游标必须有一个INTO
- 与显式游标一样,就收数据的目标变量的数目、类型要与SELECT列表的一致。
- 隐式游标一次仅能返回一行数据,使用时必须检查一场,最常见的异常有“NO_DATA_FOUND"&"TOO_MANY_ROWS".
- 为确保隐式游标仅返回一行数据,可用ROWCOUNT=1来限定,表示返回第一行数据。
- 游标for循环
FOR<变量名>IN<游标名>[(<参数1>[,<参数2>...])]LOOP
语句段
END LOOP; - 游标变量REF CURSOR
- 定义CURSOR类型
TYPE<REF CURSOR 类型名>
IS
REF CURSOR[RETURN<返回类型>]; eg:
DECLARE
TYPE xs_cur
IS
REF CURSOR RETURN XSB%ROWTYPE;REF CURSOR类型既可以是强类型,也可以是弱类型。强REF CURSOR类型有返回类型;而弱类型没有
DECLARE
TYPE xs_cur IS REF CURSOR RETURN XSB%ROWTYPE; /*强类型*/
TYPE mycur IS REF CURSOR; /*弱类型*/
- 定义CURSOR类型
- 带参数的游标
游标的参数定义与子程序的参数定义完全相同
意义在于传递一个参数给游标指定取哪部分的内容
<参数名>[参数模式]<参数类型> ;参数模式默认为IN
用open打开游标时,需要提供对应的实参- 实例
/*查询各部门的雇员情况*/
create or replace procedure proc as
BEGIN
declare
cursor dept_cur IS
select department_id from departments;
v_eid employees.employee_id % type;
v_sal employees.salary % type;
v_dept employees.department_id % type;
cursor emp_cur(v_deptid number) is
select employee_id,salary from employeeS where department_id=v_deptid;
BEGIN
for dept_record in dept_cur LOOP
EXIT WHEN DEPT_CUR%NOTFOUND;
OPEN EMP_CUR(dept_record.DEPARTMENT_ID);
LOOP
fetch emp_cur into v_eid,v_sal;
EXIT WHEN EMP_CUR%NOTFOUND;
insert into temp values(v_eid,v_sal);
commit;
end loop;
close emp_cur;
end loop;
END;
end proc;
oracle 学习(四)游标的更多相关文章
- (七)Oracle学习笔记—— 游标
1.游标简介 游标用来处理从数据库中检索的多行记录(使用SELECT语句).利用游标,程序可以逐个地处理和遍历一次检索返回的整个记录集. 为了处理SQL语句,Oracle将在内存中分配一个区域,这就是 ...
- oracle学习 九 游标的使用(持续更)
为什么要使用? 笔者查阅了一些资料之后得到的结论是, 关系型数据库是面向集合的,而游标是面向行的,游标可对取出来的集合(结果集)中每一行进行相同或不同的操作,还提供对基于游标位置而对表中数据进行删除或 ...
- oracle学习 四(持续更新中)无法为表空间 MAXDATA 中的段创建 INITIAL 区
解决建立表的时候出现的 ORA-01658: 无法为表空间 MAXDATA 中的段创建 INITIAL 区 出现这个问题是因为表空间的大小不足,可以给他扩容这样的话也会多出来一个数据文件.具体写法如下 ...
- Oracle学习(四):组函数
1.知识点:能够对比以下的录屏进行阅读 SQL> --组函数类型:avg,count,max.min,sum SQL> --工资总额 SQL> select sum(sal) fro ...
- Oracle学习(七)游标
一.简介 定义 实质上是数据集,类似数组一样,把查询的数据集存储在内存当中. 使用时可以通过游标指向其中一条记录,也可以通过循环游标达到循环数据集的目的. 游标的种类 显式游标: 使用之前必须得先声明 ...
- Oracle学习笔记三 SQL命令
SQL简介 SQL 支持下列类别的命令: 1.数据定义语言(DDL) 2.数据操纵语言(DML) 3.事务控制语言(TCL) 4.数据控制语言(DCL)
- oracle学习--循环语句
oracle学习--循环语句 loop循环: create or replace procedure pro_test_loop is i number; begin i:=0; loop i:=i ...
- Oracle 学习(scott方案)
Oracle学习中,重点是sql语句的学习,而所有的sql语句都要在scott用户下完成. 熟悉这个用户下的四张表,是必要的. 查看所有表名: SELECT * FROM tab; 查看每张表的结 ...
- Oracle学习-Power Designer、visio 2003、Oracle sql developer、OEM、expdp
Oracle的体系太庞大了.对于刚開始学习的人来说,难免有些无从下手的感觉. 经过一学期的学习对Oracle学习有了一些深入的了解,由于之前学习过Oracle的一些主要的知识.所以学习起来上手比較快一 ...
- oracle存储过程和游标的使用
oracle存储过程和游标的使用 (2011-04-19 14:52:47) 转载▼ 游标: 用来查询数据库,获取记录集合(结果集)的指针,我们所说的游标通常是指显式游标,因此从现在起没有特别指明的情 ...
随机推荐
- Mysql:循环结构
循环结构 分类 while loop repeat 循环控制: iterate类似continue ,继续, 结束本次循环,继续下一次 leave 类似于break 跳出 结束当前所 ...
- SOA--基于银行系统实例分析
阅读以下关于 Web 系统设计的叙述 [说明] 某银行拟将以分行为主体的银行信息系统,全面整合为由总行统一管理维护的银行信息系统,实现统一的用户账户管理.转账汇款.自助缴费.理财投资.贷款管理.网上支 ...
- tensorflow-cnnn-mnist
#coding=utf-8import tensorflow as tfimport numpy as npimport matplotlib .pyplot as pltfrom tensorflo ...
- 【LeetCode】电话号码的字母组合
[问题]给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合. 给出数字到字母的映射如下(与电话按键相同).注意 1 不对应任何字母. 示例: 输入:" 输出:["ad ...
- window10 家庭版安装docker和php开发环境
前期工作 一.在宿主机创建文件夹 D:\wnmp\mysql57-conf D:\wnmp\mysql57-log D:\wnmp\nginx110-conf D:\wnmp\nginx110-l ...
- 2020/2/4 PHP代码审计之会话认证漏洞
0x00 会话认证漏洞简介 会话认证是个非常大的话题,涉及各种协议和框架,如cookie.session.sso.oauth.openid等. 而其中最常使用的是Cookie和Session,他们都能 ...
- HDU - 1150 Machine Schedule(二分匹配---最小点覆盖)
题意:有两台机器A和B,A有n种工作模式(0~n-1),B有m种工作模式(0~m-1),两台机器的初始状态都是在工作模式0处.现在有k(0~k-1)个工作,(i,x,y)表示编号为i的工作可以通过机器 ...
- POJ 2993:Emag eht htiw Em Pleh
Emag eht htiw Em Pleh Time Limit: 1000MS Memory Limit: 65536KB 64bit IO Format: %I64d & %I64 ...
- oracle(9) 序列和约束
序列 SEQUENCE 也是数据库对象之一,作用:根据指定的规则生成一些列数字. 序列通常是为某张表的主键提供值使用. 主键:通常每张表都会有主键字段,该字段的值要求非空且唯一, 使用该字段来确定表中 ...
- Ubuntu Hadoop使用过程中的一些技巧1
权限不足:打开有管理员权限的文件夹:sudo nautilus 输入密码即可进入最高权限的文件管理界面可以快速对文件进行修改删除操作 修改权限:chmod命令 chmod -R 777 文件 ...