Oracle中的游标和函数详解
发表于:2025-11-08 作者:千家信息网编辑
千家信息网最后更新 2025年11月08日,Oracle中的游标和函数详解1.游标游标是一种 PL/SQL 控制结构;可以对 SQL 语句的处理进行显示控制,便于对表的行数据逐条进行处理。 游标并不是一个数据库对象,只是存留在内存中。操作步骤:
千家信息网最后更新 2025年11月08日Oracle中的游标和函数详解
Oracle中的游标和函数详解
1.游标
游标是一种 PL/SQL 控制结构;可以对 SQL 语句的处理进行显示控制,便于对表的行数据
逐条进行处理。 游标并不是一个数据库对象,只是存留在内存中。
操作步骤:
声明游标
打开游标
取出结果,此时的结果取出的是一行数据
关闭游标 到底那种类型可以把一行的数据都装进来
此时使用 ROWTYPE 类型,此类型表示可以把一行的数据都装进来。 例如:查询雇员编号为 7369 的信息(肯定是一行信息)。
例:查询雇员编号为 7369 的信息(肯定是一行信息)。
DECLARE eno emp.empno%TYPE ; empInfo emp%ROWTYPE ; BEGIN eno := &en ; SELECT * INTO empInfo FROM emp WHERE empno=eno ; DBMS_OUTPUT.put_line('雇员编号:'||empInfo.empno) ; DBMS_OUTPUT.put_line('雇员姓名:'||empInfo.ename) ; END ; 使用 for 循环操作游标(比较常用)
DECLARE -- 声明游标 CURSOR mycur IS SELECT * FROM emp where empno=-1; empInfo emp%ROWTYPE ; cou NUMBER ; BEGIN -- 游标操作使用循环,但是在操作之前必须先将游标打开 FOR empInfo IN mycur LOOP --ROWCOUNT 对游标所操作的行数进行记录 cou := mycur%ROWCOUNT ; DBMS_OUTPUT.put_line(cou||'雇员编号:'||empInfo.empno) ; DBMS_OUTPUT.put_line(cou||'雇员姓名:'||empInfo.ename) ; END LOOP ; END ;
我们可以看到游标FOR循环确实很好的简化了游标的开发,我们不在需要open、fetch和close语句,不在需要用%FOUND属性检测是否到最后一条记录,这一切Oracle隐式的帮我们完成了。
编写第一个游标,输出全部的信息。
DECLARE -- 声明游标 CURSOR mycur IS SELECT * FROM emp ; -- 相当于一个List (EmpPo) empInfo emp%ROWTYPE ; BEGIN -- 游标操作使用循环,但是在操作之前必须先将游标打开 OPEN mycur ; -- 使游标向下一行 FETCH mycur INTO empInfo ; -- 判断此行是否有数据被发现 WHILE (mycur%FOUND) LOOP DBMS_OUTPUT.put_line('雇员编号:'||empInfo.empno) ; DBMS_OUTPUT.put_line('雇员姓名:'||empInfo.ename) ; -- 修改游标,继续向下 FETCH mycur INTO empInfo ; END LOOP ; END ; 也可以使用另外一种方式循环游标:LOOP…END LOOP;
DECLARE -- 声明游标 CURSOR mycur IS SELECT * FROM emp ; empInfo emp%ROWTYPE ; BEGIN -- 游标操作使用循环,但是在操作之前必须先将游标打开 OPEN mycur ; LOOP -- 使游标向下一行 FETCH mycur INTO empInfo ; EXIT WHEN mycur%NOTFOUND ; DBMS_OUTPUT.put_line('雇员编号:'||empInfo.empno) ; DBMS_OUTPUT.put_line('雇员姓名:'||empInfo.ename) ; END LOOP ; END ; 注意 1: 在打开游标之前最好先判断游标是否已经是打开的。
通过 ISOPEN 判断
格式:
游标%ISOPEN IF mycur%ISOPEN THEN null ; ELSE OPEN mycur ; END IF ;
注意 2:可以使用 ROWCOUNT 对游标所操作的行数进行记录。
DECLARE -- 声明游标 CURSOR mycur IS SELECT * FROM emp ; empInfo emp%ROWTYPE ; cou NUMBER ; BEGIN -- 游标操作使用循环,但是在操作之前必须先将游标打开 IF mycur%ISOPEN THEN null ; ELSE OPEN mycur ; END IF ; LOOP -- 使游标向下一行 FETCH mycur INTO empInfo ; EXIT WHEN mycur%NOTFOUND ; cou := mycur%ROWCOUNT ; DBMS_OUTPUT.put_line(cou||'雇员编号:'||empInfo.empno) ; DBMS_OUTPUT.put_line(cou||'雇员姓名:'||empInfo.ename) ; END LOOP ; END ;
2.函数
函数就是一个有返回值的过程。
定义一个函数:此函数可以根据雇员的编号查询出雇员的年薪
CREATE OR REPLACE FUNCTION myfun(eno emp.empno%TYPE) RETURN NUMBER AS rsal NUMBER ; BEGIN SELECT (sal+nvl(comm,0))*12 INTO rsal FROM emp WHERE empno=eno ; RETURN rsal ; END ;
直接写 SQL 语句,调用此函数:
SELECT myfun(7369) FROM dual ;
写一个函数 输入一个员工名字,判断该名字在员工表中是否存在。存在返回 1,不存在返回 0
create or replace function empfun(en emp.ename%type) return number as is_exist number; begin select count(*) into is_exist from emp where ename=upper(en); return is_exist; end;
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
游标
雇员
一行
函数
循环
数据
信息
姓名
是在
先将
类型
语句
查询
名字
员工
结果
装进
处理
控制
肯定
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
我本沉默标准数据库
北京服务器租用方案云主机
微信服务器的安全性
如何加入服务器的组
中国地图行政区划数据库
两个电脑间怎么传输数据库
手机如何建立虚拟服务器
数据库分隔符拆成两列
乙方提供服务器的好处
哪种方式能关闭数据库
软件开发涉及哪些软件
网络安全小报上网安全小贴士
新乡维度网络技术有限公司
软件开发企业偷税
网络安全技术服务包括什么
区块链物联网网络安全市场分析
石家庄西晨软件开发
如何管理服务器多个数据库
金凤区app软件开发报价多少
常用外文数据库检索和使用
闵行区本地网络技术方案设计
接口怎么访问数据库
盐城佳盛网络技术有限公司
电脑服务器硬盘多大
全文数据库包括哪些
桌面共享软件开发有什么用
php数据库取值重复
数据库怎么更改导入最大上限
网络安全危机思考
db2 数据库连接实例