Oracle中的游标和函数详解
发表于:2025-02-02 作者:千家信息网编辑
千家信息网最后更新 2025年02月02日,Oracle中的游标和函数详解1.游标游标是一种 PL/SQL 控制结构;可以对 SQL 语句的处理进行显示控制,便于对表的行数据逐条进行处理。 游标并不是一个数据库对象,只是存留在内存中。操作步骤:
千家信息网最后更新 2025年02月02日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安全错误
数据库的锁怎样保障安全
sql修改一部分数据库
广西桂林软件开发公司
软件开发公司有哪些优惠
杭州六哥网络技术
科技互联网专业怎么样
服务器怎么做vps
服务器 远程黑屏
什么软件能做数据库
地震数据库系统技术规范
国外网络技术是ftth
曦东网络技术有限公司
民生银行服务器异常
网络安全和服务哪个好
怎样取得软件开发的资格
安徽新程网络技术有限公司
app软件开发团队价位
软件开发心跳检测
怎样把云服务器的联系人导入手机
凌梦云服务器
阿里云服务器磁盘扩容
数据库SQL工作待遇
对于网络安全评估的调研数据
数据库经典教材
无法确认与选中服务器的链接
我的世界哪款服务器最火
关系数据库系统的简称
互联网巨头科技
溧水区智能化软件开发售后服务
中国科技发展互联网高铁英文作文
druid 时序数据库