oracle中的游标
来源:互联网 发布:python lambda 包含for 编辑:程序博客网 时间:2024/06/05 00:43
BEGIN
UPDATE emp
SET sal = sal +500
WHERE sal <1500;
IFSQL%FOUNDTHEN
dbms_output.put_line('更新成功,更新了' || SQL%ROWCOUNT);
COMMIT; --执行完毕提交数据
ELSE
dbms_output.put_line('更新失败');
ENDIF;
END;
SELECT *FROM empWHERE sal <1500;
SELECT *FROM emp;
-----------------------------------------------------------------
--存储过程
--查询指定部门的员工信息
DECLARE
--游标的声明
CURSOR empinfo_curIS
SELECT empno,ename,sal
FROM emp
WHERE deptno =10;
--定义以下变量分别保存游标中提取的数据
v_empno emp.empno%TYPE;
v_ename emp.ename%TYPE;
v_sal emp.sal%TYPE;
BEGIN
--2.打开游标,只能打开一次,不能重复打开
OPEN empinfo_cur;
--3.提取游标中的数据
FETCH empinfo_curINTO v_empno,v_ename,v_sal;
EXITWHEN (empinfo_cur%NOTFOUND);
--输出游标中的数据
dbms_output.put_line('员工工号:' || v_empno ||
',员工姓名:' || v_ename ||
',员工工资:' || v_sal);
--4.关闭游标
CLOSE empinfo_cur;
END;
--------------------------------------------------------------------
--使用loop-exit-end循环结构实现
--查询指定部门的员工信息
DECLARE
--游标的声明
CURSOR empinfo_curIS
SELECT empno,ename,sal
FROM emp
WHERE deptno =10;
--定义以下变量分别保存游标中提取的数据
v_empno emp.empno%TYPE;
v_ename emp.ename%TYPE;
v_sal emp.sal%TYPE;
BEGIN
--2.打开游标,只能打开一次,不能重复打开
OPEN empinfo_cur;
--3.提取游标中的数据
LOOP
--fetch语句执行过程:先向下移动游标,再从游标中提取数据
FETCH empinfo_curINTO v_empno,v_ename,v_sal;
--当提取到最后一行,没有数据时,%NOTFOUND返回为true
EXITWHEN (empinfo_cur%NOTFOUND);
--输出游标中的数据
dbms_output.put_line('员工工号:' || v_empno ||
',员工姓名:' || v_ename ||
',员工工资:' || v_sal);
ENDLOOP;
--4.关闭游标
CLOSE empinfo_cur;
END;
-------------------------------------------------------------
--使用while-loop-end循环结构实现
--查询指定部门的员工信息
DECLARE
--1.游标的声明,带参数的游标
CURSOR empinfo_cur(v_deptnoNUMBER)IS--number后不能带参数
SELECT empno,ename,sal
FROM emp
WHERE deptno =10;
--定义以下变量分别保存游标中提取的数据
v_empno emp.empno%TYPE;
v_ename emp.ename%TYPE;
v_sal emp.sal%TYPE;
BEGIN
--2.打开游标,只能打开一次,不能重复打开
OPEN empinfo_cur(&deptno);--带参数的游标
--3.提取游标中的数据
--先执行fetch操作
FETCH empinfo_curINTO v_empno,v_ename,v_sal;
WHILE empinfo_cur%FOUNDLOOP
--输出游标中的数据
dbms_output.put_line('员工工号:' || v_empno ||
',员工姓名:' || v_ename ||
',员工工资:' || v_sal);
dbms_output.put_line('当前提取了' || empinfo_cur%ROWCOUNT ||'行');
--继续执行fetch操作
FETCH empinfo_curINTO v_empno,v_ename,v_sal;
ENDLOOP;
--4.关闭游标
CLOSE empinfo_cur;
END;
----------------------------------------------------
--for-in循环游标
DECLARE
CURSOR empinfo_cur(v_deptnoNUMBER)
IS
SELECT empno,ename,sal
FROM emp
WHERE deptno = v_deptno;
BEGIN
--for循环游标:自动打开,自动提取,自动关闭
--emp_rec是一个记录类型的变量,也是自动定义,不需要重新定义
--每一次循环从游标empinfo_cur中取数据,将其保存在记录类型变量emp_rec中
FOR emp_recIN empinfo_cur(&deptno)LOOP
dbms_output.put_line('员工工号:' || emp_rec.empno ||
',员工姓名:' || emp_rec.ename ||
',员工工资:' || emp_rec.sal);
ENDLOOP;
END;
--------------------------------------------------------------
--ref 引用游标
DECLARE
--声明一个REF游标类型
TYPE emp_reftypeISREFCURSOR;
--声明一个emp_reftype类型的游标变量
empinfo_cur emp_reftype;
--声明变量保存游标查询的数据
v_empno emp.empno%TYPE;
v_ename emp.ename%TYPE;
v_sal emp.sal%TYPE;
BEGIN
IF &sal >2000THEN
--打开游标并传入sql语句
OPEN empinfo_cur
FOR
SELECT empno,ename,sal
FROM emp
WHERE sal >2000;
ELSE
OPEN empinfo_cur
FOR
SELECT empno,ename,sal
FROM emp
WHERE sal <=2000;
ENDIF;
--提取数据(此处不能使用for循环)
LOOP
FETCH empinfo_curINTO v_empno,v_ename,v_sal;
EXITWHEN (empinfo_cur%NOTFOUND);
dbms_output.put_line('员工工号:' || v_empno ||
',员工姓名:' || v_ename ||
',员工工资:' || v_sal);
ENDLOOP;
END;
- oracle中的游标
- ORACLE中的游标汇总
- Oracle中的游标
- oracle中的游标
- oracle中的游标
- Oracle中的游标
- oracle中的游标学习
- Oracle 中的游标
- Oracle中的游标
- ORACLE中的游标Cursor总结
- Oracle中的游标(光标)
- Oracle中的游标和函数
- oracle 中的包和游标实例
- 使用游标实现Oracle中的行列转换
- oracle使用游标更新表中的字段
- oracle中的游标详解和示意图
- Oracle中的存储过程及游标
- Oracle游标
- paip.svn服务服务器安装配置
- 0403-027 The parameter list is too long 参数过长报错
- oracle循环语句
- 如何使用Apache的非默认端口部署wordpress
- 编写一个"banner"函数,该函数的输入为大写字母
- oracle中的游标
- 我的ubuntu配置,避免重装系统后手足无措
- dedeCMS实现点击栏目时显示单页面
- oracle存储过程
- Nginx中的PHP缓冲问题
- Linux shell脚本全面学习
- hdu 4366 树形结构 线段树
- Hdu 3123 (0! + 1! + 2! + 3! + 4! + ... + n!)%m
- hdu 4366 单点更新,区间查询最值