1) 使用Select语句可以返回一个结果集,而如果需要对结果集中单独的行进行操作,则需要使用游标;
2) 使用游标主要遵循4个步骤----声明游标、打开游标、检索游标、关闭游标;
2) 使用游标主要遵循4个步骤----声明游标、打开游标、检索游标、关闭游标;
- 声明游标:主要是定义一个游标名称来对应一条查询语句,从而可以利用该游标对比查询语句返回的结果集进行单行操作;
- 打开游标:在声明游标时为游标指定了查询语句,但此时该查询语句并不会被Oracle执行。只有打开游标后,Oracle才会执行查询语句;
- 检索游标:打开游标后,游标所对应的Select语句也就被执行了,如果想要获取结果集中的数据,就需要检索数据。检索数据,实际上就是从结果集中获取单行数据并保存到定义的变量中,这需要使用Fetch语句,其语法如下
其中,variable用来存储结果集中单行数据的变量,可以选择使用多个普通类型的变量,一对一的接收数据行中的列值;也可以使用一个%rowtype类型的变量,或
自定义的记录类型变量,接收数据行中所有的列值。变量需要事先定义。
- 关闭游标:关闭游标需要使用close语句。游标被关闭后,Oracle将释放游标中select语句的查询结果所占用的系统资源;
3)游标的属性
游标属性的使用,是在属性前添加游标名称,如cursor_name%found;
- %found:返回布尔类型的值。用于判断最近一次读取记录时是否有数据行返回,若有则返回true,否则返回false;
- %notfound:返回布尔类型的值,与%found相反;
- %isopen:返回布尔类型的值。用于判断游标是否已经打开,若打开则返回true,否则返回false;
- %rowcount:返回数字类型的值。用于返回已经从游标中读取的记录数;
- 简单游标循环:loop搭配fetch实现简单游标循环,遵循游标的4个步骤执行;
- 游标for循环:在这种情况下,不需要手动打开和关闭游标,也不需要手动判断游标是否还有返回记录,而且在for语句中设置的循环变量本身就存储了当前检索记录的所有列值,因此也不再需要定义变量接受记录值,即for循环中,不能对游标进行open、fetch、close操作;
5)使用游标可以更新表中的数据;
游标的更新操作针对当前游标所定位的数据行。要想实现使用游标更新数据,首先需要在声明游标时使用for update字句,然后就可以在update和delete语句使用where current of字句,修改或删除游标结果集中当前行对应的表中的数据行。