PL-SQL游标

本文概要

  • 1)PL / SQL隐式游标
  • PL / SQL隐式游标实施例
  • 2)PL / SQL显式游标
  • 显式游标的语法
  • 脚长
  • 1)声明游标
  • 2)打开游标
  • 3)取游标
  • 4)关闭游标
  • PL / SQL显式游标示例
当处理一个SQL语句中,Oracle创建称为上下文区域的存储区域。游标是一个指向这个上下文区域。它包含加工所需的声明的所有信息。在PL / SQL,上下文区域由游标控制。游标包含一个select语句,并通过它访问的数据行的信息。
游标被用于称为一个程序来读取和处理在同一时间由SQL语句,一个返回的行。有两种类型的游标:
  • 隐式游标
  • 显式游标
1)PL / SQL隐式游标在执行SQL语句的隐式游标会自动通过Oracle生成,如果不使用显式游标的声明。
这些是默认创建的DML语句像INSERT,UPDATE,DELETE等被执行时处理语句。
ORCALE提供了一种称为隐式游标的属性来检查DML操作的状态某些属性。其中一些是:%FOUND,%NOTFOUND,%ROWCOUNT和%ISOPEN。
例如:当你执行像INSERT,UPDATE SQL语句,DELETE,那么游标属性告诉任何行是否会受到影响,有多少人受到影响。如果你在PL / SQL块运行SELECT INTO语句,隐式游标属性可以用来找出是否有任何行已被SELECT语句返回。如果没有选定的数据将会返回一个错误。
下表soecifies游标,它的每一个属性的状态。
属性描述
%FOUND如果INSERT、DELETE和UPDATE等DML语句至少影响一行或多行,或者SELECT INTO语句返回一行或多行,则它的返回值为TRUE。否则返回FALSE。
%未找到如果INSERT、DELETE和UPDATE等DML语句不影响任何行,或者SELECT INTO语句不返回任何行,那么它的返回值为TRUE。否则返回FALSE。它与%正好相反。
%ISOPEN它总是返回隐式游标FALSE,因为SQL游标正在执行其相关的SQL语句后自动关闭。
%ROWCOUNT它返回受DML语句(如INSERT、DELETE和UPDATE)影响的行数,或SELECT INTO语句返回的行数。
PL / SQL隐式游标实施例创建客户表,并有记录:
ID名称年龄地址薪水
1Ramesh 23 Allahabad20000
2Suresh22坎普尔22000
3马赫什24Ghaziabad24000
4Chandan25Noida26000
Alex21巴黎28000
6苏尼塔20Delhi30000
让我们执行下面的程序通过5000更新每个客户的表,增加工资在这里,SQL%ROWCOUNT属性来确定受影响的行数:
创建过程:
DECLARE total_rows number(2); BEGIN UPDATEcustomers SET salary = salary + 5000; IF sql%notfound THEN dbms_output.put_line('no customers updated'); ELSIF sql%found THEN total_rows := sql%rowcount; dbms_output.put_line( total_rows || ' customers updated '); END IF; END; /

输出:
6 customers updated PL/SQL procedure successfully completed.

现在,如果你在客户表来检查的记录,你会发现,该行被更新。
select * from customers;

ID名称年龄地址薪水
1Ramesh 23 Allahabad25000
2Suresh22坎普尔27000
3马赫什24Ghaziabad29000
4Chandan25Noida31000
Alex21巴黎33000
6苏尼塔20Delhi35000
2)PL / SQL显式游标显式游标由程序员定义,以获得对上下文区域更多的控制。这些游标应在PL / SQL块的声明部分来限定。它在返回多行SELECT语句创建的。
显式游标的语法以下是创建一个显式游标的语法:
CURSOR cursor_name IS select_statement; ;

步长用显式游标工作时,你必须遵循这些步骤。
  1. 声明游标的内存初始化。
  2. 打开游标分配内存。
  3. 取游标检索数据。
  4. 关闭游标释放分配的内存。
1)声明游标它定义了游标的名称和相关的SELECT语句。
语法显式游标decleration
CURSOR name IS SELECT statement;

2)打开游标它是用来分配游标内存,可以很容易地获取由SQL语句转换为它返回的行。
语法游标打开:
OPEN cursor_name;

3)取游标它用于在同一时间访问一个行。你可以从上面打开的游标如下读取行:
语法游标提取:
FETCH cursor_name INTO variable_list;

4)关闭游标它是用来释放分配的内存。以下语法用于关闭上述打开的游标。
语法游标接近:
Close cursor_name;

PL / SQL显式游标示例显式游标由程序员来获得对上下文区域更多的控制定义。它是在PL / SQL块的声明部分定义。它在返回多行SELECT语句创建的。
让我们举个例子来说明如何使用显式游标的。在这个例子中,我们使用的是已经创建CUSTOMERS表。
创建客户表,并有记录:
ID名称年龄地址薪水
1Ramesh 23 Allahabad20000
2Suresh22坎普尔22000
3马赫什24Ghaziabad24000
4Chandan25Noida26000
Alex21巴黎28000
6苏尼塔20Delhi30000
创建过程:
执行以下程序来检索客户的姓名和地址。
DECLARE c_id customers.id%type; c_name customers.name%type; c_addr customers.address%type; CURSOR c_customers is SELECT id,name,address FROM customers; BEGIN OPEN c_customers; LOOP FETCH c_customers into c_id,c_name,c_addr; EXIT WHEN c_customers%notfound; dbms_output.put_line(c_id || ' ' || c_name || ' ' || c_addr); END LOOP; CLOSE c_customers; END; /

【PL-SQL游标】输出:
1RameshAllahabad 2SureshKanpur 3MaheshGhaziabad 4ChandanNoida 5AlexParis 6SunitaDelhi PL/SQL procedure successfully completed.

    推荐阅读