`
1140566087
  • 浏览: 555910 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
博客专栏
2c4ae07c-10c2-3bb0-a106-d91fe0a10f37
c/c++ 入门笔记
浏览量:18407
3161ba8d-c410-3ef9-871c-3e48524c5263
Android 学习笔记
浏览量:312795
Group-logo
J2ME 基础学习课程集
浏览量:18538
A98a97d4-eb03-3faf-af96-c7c28f709feb
Spring 学习过程记录...
浏览量:17467
社区版块
存档分类
最新评论

Oracle 游标 静态游标

阅读更多
[size=medium][/size]SQL> set serveroutput on;
SQL> remark 游标:一个特定结果集中的行指针,它指向确定的记录,通过移动游标可以操作不同的行数据
SQL> remark 游标的类型:静态游标  引用游标
SQL> remark 静态游标分为:隐式游标  显示游标
SQL> remark 隐式游标:系统进行查询和修改操作的时候自动调用的
SQL> remark 显示游标:开发人员显示的定义游标的查询语句
SQL> remark 游标的属性 4  个:
SQL> remark %isopen %found %notfound %rowcount 对应的关系分别是:
SQL> remark %isopen :判断游标是否被打开  true/false;
SQL> remark %found :判断游标的行是否有效 与 %nofound 结果是相反的
SQL> remark %rowcount 返回当前位置为止游标读取的记录行数。 值为整数
SQL> remark ....显示游标-普通游标--.................
SQL> declare
  2  cursor curemp is select empno ,ename from emp;
  3  theempno emp.empno%type;
  4  theename emp.ename%type;
  5  begin
  6  open curemp;
  7  loop
  8  fetch curemp into theempno,theename;
  9  exit when curemp%nofound;
10  dbms_output.put_line('theempno'||theempno);
11  end loop;
12  close curemp;
13  end;
14  /
exit when curemp%nofound;
                 *
ERROR at line 9:
ORA-06550: line 9, column 19:
PLS-00208: identifier 'NOFOUND' is not a legal cursor attribute
ORA-06550: line 9, column 2:
PL/SQL: Statement ignored


SQL> edit;
Wrote file afiedt.buf

  1  declare
  2  cursor curemp is select empno ,ename from emp where deptno=30;
  3  theempno emp.empno%type;
  4  theename emp.ename%type;
  5  begin
  6  open curemp;
  7  loop
  8  fetch curemp into theempno,theename;
  9  exit when curemp%notfound;
10  dbms_output.put_line('theempno'||theempno);
11  end loop;
12  close curemp;
13* end;
SQL> /
theempno7499                                                                   
theempno7521                                                                   
theempno7654                                                                   
theempno7698                                                                   
theempno7844                                                                   
theempno7900                                                                   

PL/SQL procedure successfully completed.

SQL> remark 使用fetch从游标中获取数据给参数赋值的时候要与查询语句匹配,如果查询语句式select * from....那么需要定一个rowtype的变量
SQL> declare
  2  emprow emp%rowtype;
  3  cursor empcur is select * from emp where deptno=30;
  4  begin
  5  open empcur;
  6  loop
  7  fetch empcur into emprow;
  8  exit when empcur%notfound;
  9  dbms_output.put_line('编号:'||emprow.empno);
10  end loop;
11  close empcur;
12  end;
13  /
编号:7499                                                                     
编号:7521                                                                     
编号:7654                                                                     
编号:7698                                                                     
编号:7844                                                                     
编号:7900                                                                     

PL/SQL procedure successfully completed.

SQL> remark RowType 类型,能获取一整行的结果集;
SQL> remark 使用显示游标的时候应该注意事项:
SQL> remark 显示游标一定关联一个查询的结果集,并且在游标定义的时候就更这个结果集绑定到了一起;
SQL> remark ............隐式游标...................
SQL> remark 对于隐式游标而言SQL%ISOPEN总是false,这是因为隐式游标在DML语句执行的时候打开,结束时就立刻关闭了。例如:
SQL> begin
  2  update emp set sal=sal*1.1 where deptno=30;
  3  DBMS_OUTPUT.PUT_LINE('被修改记录的条数为:'||SQL%ROWCOUNT);
  4  END;
  5  /
被修改记录的条数为:6                                                          

PL/SQL procedure successfully completed.

SQL> REMARK ...............................................................
SQL> REMARK ............带参数的游标.....................................
SQL> REMARK 在ORACLE中设定的参数只能在定义游标的查询中使用。
SQL> EDIT
Wrote file afiedt.buf

  1  DECLARE
  2  THEEMPNO EMP.DEPTNO%TYPE;
  3  EMPROW EMP%ROWTYPE;
  4  CURSOR EMPCUR(DELDEPTNO EMP.DEPTNO%TYPE) IS SELECT * FROM EMP WHERE DEPTNO=DELDEPTNO;
  5  BEGIN
  6  THEEMPNO:=&员工编号;
  7  OPEN EMPCUR(THEEMPNO);
  8  DBMS_OUTPUT.PUT_LINE('游标的记录行数--'||EMPCUR%ROWCOUNT);
  9  LOOP
10  FETCH EMPCUR INTO EMPROW;
11  EXIT WHEN EMPCUR%NOTFOUND;
12  DBMS_OUTPUT.PUT_LINE('编号:'||EMPROW.EMPNO||'员工姓名:'||EMPROW.ENAME);
13  END LOOP;
14  DBMS_OUTPUT.PUT_LINE('游标的记录条数为:'||EMPCUR%ROWCOUNT);
15  CLOSE EMPCUR;
16* END;
SQL> /
Enter value for 员工编号: 20
old   6: THEEMPNO:=&员工编号;
new   6: THEEMPNO:=20;
游标的记录行数--0                                                              
编号:7369员工姓名:SMITH                                                      
编号:7566员工姓名:JONES                                                      
编号:7788员工姓名:SCOTT                                                      
编号:7876员工姓名:ADAMS                                                      
编号:7902员工姓名:FORD                                                       
游标的记录条数为:5                                                            

PL/SQL procedure successfully completed.

SQL> REMARK 循环游标
SQL> REMARK 操作游标的过程:打开  循环取游标数据,操作数据 关闭游标的动作
SQL> REMARK 使用循环游标可以省去这些烦琐
SQL> DECLARE
  2  CURSOR EMPCUR IS SELECT * FROM EMP WHERE DEPTNO=30;
  3  BEGIN
  4  FOR EMPROW IN EMPCUR
  5  LOOP
  6  DBMS_OUTPUT.PUT_LINE('编号:'||EMPROW.EMPNO||'姓名:'||EMPROW.ENAME);
  7  END LOOP;
  8  END;
  9  /
编号:7499姓名:ALLEN                                                          
编号:7521姓名:WARD                                                           
编号:7654姓名:MARTIN                                                         
编号:7698姓名:BLAKE                                                          
编号:7844姓名:TURNER                                                         
编号:7900姓名:JAMES                                                          

PL/SQL procedure successfully completed.

SQL> REMARK FOR 查询变量 IN 游标变量;
SQL> REMARK 查询变量的使用不需要声明
SQL> REMARK 查询变量是一个行对象,其结构与查询语句查询列表一致。
SQL> REMARK 获取的方法:查询变量.列名;
SQL> REMARK 查询变量只能取数据,不能给查询变量赋值;
SQL> REMARK ..........................................................
SQL> REMARK 0........................................................
SQL> REMARK 利用游标修改数据
SQL> REMARK 使用游标修改数据是:逐条获取,逐条处理;利用游标进行数据查询,需要在打开游标的时候就进行数据的锁定;
SQL> REMARK 锁定数据的语法:
SQL> REMARK 游标定义语法:CURSOR 游标名称 IS 查询语句 FOR UPDATE;
SQL> REMARK 对当前游标进行删除和修改的语法:
SQL> REMARK UPDATE 语句 WHERE CURRENT OF 游标名称;
SQL> REMARK DELETE 语句 WHERE CURRENT OF 游标名称;
SQL> DECLARE
  2  CURSOR EMPCUR IS SELECT * FROM EMP FOR UPDATE;
  3  BEGIN
  4  FOR EMPROW IN EMPCUR
  5  LOOP
  6  IF EMPROW.DEPTNO=20 THEN
  7  DBMS_OUTPUT.PUT_LINE('被删除的记录编号为:'||EMPROW.EMPNO);
  8  DELETE FROM EMP WHERE CURRENT OF EMPCUR;
  9  END IF;
10  END LOOP;
11  END;
12  /
被删除的记录编号为:7369                                                       
被删除的记录编号为:7566                                                       
被删除的记录编号为:7788                                                       
被删除的记录编号为:7876                                                       
被删除的记录编号为:7902                                                       

PL/SQL procedure successfully completed.

SQL> SPOOL OFF;
[color=olive][/color]
分享到:
评论

相关推荐

    oracle游标的总结oracle游标的总结

    Oracle 游标可以分为两类:静态游标和动态游标。 1. 静态游标:静态游标是使用 cursor...is 语句定义的游标,它可以对查询语句(select)返回的多条记录进行处理。 2. 动态游标:动态游标是在运行期间传递参数来...

    oracle游标学习资料

    Oracle游标是数据库编程中非常重要的一个概念,它允许开发者逐行处理查询结果集,而不仅仅是一次性处理所有数据。在Oracle中,游标分为隐式游标和显式游标。 **一、游标简介** 游标的核心功能是提供一种方式来遍历...

    非常详细的Oracle游标整理

    - 与静态游标不同,REF游标在运行后才与SQL关联,这使得它更适合处理可能变化的查询结构。 4. **游标在DML操作中的应用**: - 如果需要在游标内部进行DML操作,可以使用`for update`子句来锁定查询到的行。这在多...

    静态、动态sql及各种游标

    静态、动态SQL及各种游标 静态SQL和动态SQL是两种不同的SQL语句执行方式,分别应用于不同的场景中。静态SQL是指在PL/SQL中直接运行的SQL语句,没有什么特别之处。动态SQL则是指利用EXECUTE IMMEDIATE语句执行的SQL...

    Oracle游标语法总结.doc

    1. 静态游标:静态游标可以进一步分为显式游标和隐式游标。 - 显式游标:需要明确地声明和打开,例如 `CURSOR emp_cur (p_deptid in number) is select * from employees where department_id = p_deptid;` - 隐式...

    oracle游标溢出调优

    Oracle游标溢出调优是数据库性能优化的重要环节,尤其对于处理大量并发查询或复杂业务逻辑的应用来说。游标管理是Oracle数据库管理SQL语句的关键部分,它涉及到内存分配、缓存策略以及解析效率。以下将详细介绍游标...

    修改后的oracle游标总结,比较的全面

    游标可以分为静态游标和动态游标两种。 静态游标 静态游标可以分为显示游标和隐式游标两种。 显示游标 显示游标是使用 cursor...is 命令定义的游标,它可以对查询语句(select)返回的多条记录进行处理。例如: ...

    oracle游标介绍[定义].pdf

    Oracle游标是数据库管理系统中的一种重要机制,它允许程序逐行处理结果集,这对于交互式和在线应用程序尤其有用。游标定义了一个位置,使我们能够指定结果集中特定行的位置,检索一行或多行,修改数据,以及根据需要...

    Oracle存储过程游标详解

    游标可以分为静态游标和REF游标两种类型。静态游标是指结果集已经确实(静态定义)的游标,可以进一步分为隐式游标和显示游标。隐式游标是所有 DML 语句为隐式游标,可以通过隐式游标属性获取 SQL 语句信息。显示...

    ORACLE中的游标汇总

    1. 静态游标 - **显式游标**:显式游标需要程序员明确声明并管理,包括打开、关闭、提取和移动游标。在示例代码中,`DECLARE`语句定义了一个名为`emp_cur`的游标,它接受一个参数`p_deptid`,然后通过`SELECT`语句...

    Oracle数据库的游标学习总结

    Oracle游标主要分为两大类:显示游标和隐式游标。其中,显示游标又可以根据定义方式的不同细分为静态游标和动态游标。 ##### 显示游标 显示游标主要用于处理SELECT语句的结果集。当定义游标时,需要明确指定SQL...

    oracle异常和游标管理.pptx

    静态游标是隐式游标或显式游标。隐式游标是 PL/SQL 为所有 DML 语句打开的一个隐式游标,在 SQL 操作完成后,关闭游标。显式游标是用户定义的游标,需要使用 DECLARE 语句声明。 ### 游标属性 游标属性可以用来...

    Oracle封锁及动态游标技术分析与应用.pdf

    - 静态游标:分为隐式和显式两种。隐式游标由Oracle自动管理,无需声明,每次DML操作后都可以使用。显式游标需要声明游标变量,并按照步骤执行,提供更多的控制。 - 动态游标:允许在运行时改变SQL查询,适应不同...

    关于存储过程和游标的总结

    * 静态游标:结果集已经确实(静态定义)的游标。分为隐式和显示游标。 + 隐式游标:所有 DML 语句为隐式游标,通过隐式游标属性可以获取 SQL 语句信息。 + 显式游标:用户显示声明的游标,即指定结果集。当查询...

    SQL经典游标使用方法

    静态游标在打开时加载所有数据,适合不经常更改的数据;动态游标则始终反映数据库的最新状态;键集驱动游标在内存中保存一部分键,提高效率;只读/可写游标则决定了是否允许修改数据。 6. **游标示例**: 龙摆尾...

    ORACLE学习资料大全(存过,索引,函数,优化,分页,联表,游标,基础sql)

    Oracle提供了多种类型的游标,如隐式游标、显式游标和静态游标,它们允许程序按需读取和处理单条记录。 最后,“基础SQL语法”是所有Oracle学习的起点。这包括数据的插入、更新、删除(INSERT、UPDATE、DELETE),...

    老二牛车第六章理论课游标管理.pdf

    - Oracle提供了两种主要类型的游标:**静态游标**和**REF游标**。 - **静态游标**:在编译时已经知道其SELECT语句的游标,通常用于简单的查询场景。 - **隐式游标**:由PL/SQL自动声明的游标,用户无法直接命名和...

Global site tag (gtag.js) - Google Analytics