1.5 PLSQL中的游标

  • 1.5.1游标的概念


1.5.1游标的概念

游标(cuscor)可以看作私有sql区的句柄或名称,在sql语句执行过程中保存解析后的语句和其他信息

1.隐式游标与显式游标

游标分为隐式游标和显式游标

1)隐式游标

当运行DML与SELECT INTO语句时,PLSQL会打开一个隐式游标,隐式游标自动打开,自动关闭,无法人工干预

2)显示游标

用户在代码中定义的游标,并由用户在程序中控制打开,检索,关闭

----》操作分为4步:定义游标,打开游标,检索游标,关闭游标

----》只能指向一行,可以循环检索(叫做游标循环)

----》游标循环的使用频率高

2.游标的属性

pymysql 迭代游标 cursor 游标 plsql_数据库

pymysql 迭代游标 cursor 游标 plsql_数据库_02

1)隐式游标的属性

由于没有显示的声明游标,所以隐式游标也没有名字,引用隐式游标属性只能使用关键字sql,如果语句块中存在多个dml和select into ,则隐式游标属性为最近执行的sql的属性

A)SQL%ROWCOUNT

返回的行数

pymysql 迭代游标 cursor 游标 plsql_数据库_03

B)SQL%ISOPEN

pymysql 迭代游标 cursor 游标 plsql_plsql_04

C)SQL%FOUND

%FOUND:是否涉及到行,由于该表被删除,所有的行记录都被删除了,因此返回rows found

pymysql 迭代游标 cursor 游标 plsql_pymysql 迭代游标 cursor_05

pymysql 迭代游标 cursor 游标 plsql_plsql_06

D)SQL%NOTFOUND

%NOTFOUND :是否涉及到行,涉及不到行,显示为真

2)显示游标属性

A)SQL%ROWCOUNT

累计行数

pymysql 迭代游标 cursor 游标 plsql_显式_07

B)SQL%ISOPEN

%ISOPEN:通常使用在异常判断里

pymysql 迭代游标 cursor 游标 plsql_plsql_08

pymysql 迭代游标 cursor 游标 plsql_SQL_09

C)SQL%FOUND

pymysql 迭代游标 cursor 游标 plsql_SQL_10

D)SQL%NOTFOUND

效果和%FOUND相反

3.游标的循环

由于显式游标的%ROWCOUNT,只能提取一行数据,而游标对应的sql语句可能返回很多的行,而游标只能一次提取一行,此时我们需要使用循环遍历这些行

1)简单游标循环

pymysql 迭代游标 cursor 游标 plsql_plsql_11

  1. WHILE游标循环
    While游标循环需要写fetch2次
  2. pymysql 迭代游标 cursor 游标 plsql_数据库_12

  3. FOR游标循环(常用)
    游标FOR循环比较简单,并且自动打开游标,自动关闭游标。
    游标FOR循环有两种实现形式
    R----》表示记录类型变量
  4. pymysql 迭代游标 cursor 游标 plsql_数据库_13