本文概要
- 1)PL / SQL隐式游标
- PL / SQL隐式游标实施例
- 2)PL / SQL显式游标
- 显式游标的语法
- 脚长
- 1)声明游标
- 2)打开游标
- 3)取游标
- 4)关闭游标
- PL / SQL显式游标示例
游标被用于称为一个程序来读取和处理在同一时间由SQL语句,一个返回的行。有两种类型的游标:
- 隐式游标
- 显式游标
这些是默认创建的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语句返回的行数。 |
ID | 名称 | 年龄 | 地址 | 薪水 |
---|---|---|---|---|
1 | Ramesh | 23 | Allahabad | 20000 |
2 | Suresh | 22 | 坎普尔 | 22000 |
3 | 马赫什 | 24 | Ghaziabad | 24000 |
4 | Chandan | 25 | Noida | 26000 |
五 | Alex | 21 | 巴黎 | 28000 |
6 | 苏尼塔 | 20 | Delhi | 30000 |
创建过程:
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 | 名称 | 年龄 | 地址 | 薪水 |
---|---|---|---|---|
1 | Ramesh | 23 | Allahabad | 25000 |
2 | Suresh | 22 | 坎普尔 | 27000 |
3 | 马赫什 | 24 | Ghaziabad | 29000 |
4 | Chandan | 25 | Noida | 31000 |
五 | Alex | 21 | 巴黎 | 33000 |
6 | 苏尼塔 | 20 | Delhi | 35000 |
显式游标的语法以下是创建一个显式游标的语法:
CURSOR cursor_name IS select_statement;
;
步长用显式游标工作时,你必须遵循这些步骤。
- 声明游标的内存初始化。
- 打开游标分配内存。
- 取游标检索数据。
- 关闭游标释放分配的内存。
语法显式游标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 | 名称 | 年龄 | 地址 | 薪水 |
---|---|---|---|---|
1 | Ramesh | 23 | Allahabad | 20000 |
2 | Suresh | 22 | 坎普尔 | 22000 |
3 | 马赫什 | 24 | Ghaziabad | 24000 |
4 | Chandan | 25 | Noida | 26000 |
五 | Alex | 21 | 巴黎 | 28000 |
6 | 苏尼塔 | 20 | Delhi | 30000 |
执行以下程序来检索客户的姓名和地址。
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.
推荐阅读
- PL-SQL函数
- PL-SQL存储过程
- PL-SQL GOTO语句
- PL-SQL Continue语句
- PL-SQL For循环
- PL-SQL While循环
- PL-SQL循环语句
- PL-SQL退出循环
- PL-SQL case语句