`

Oracle游标之select for update和where current of 语句

阅读更多

转载http://hanjiangduqiao.blog.163.com/blog/static/613105442011431111153601

 

使用select for update 语句可以使用行锁锁定你要更改的记录.当遇到下一个commit和rollback语句时会被释放.

The Select For Update statement allows you to lock the records in the cursor result set. You are not required to make changes to the records in order to use this statement. The record locks are released when the next commit or rollback statement is issued.

语法如下:The syntax for the Select For Update is:

CURSOR cursor_name
IS
select_statement
FOR UPDATE [of column_list] [NOWAIT];

当你要使用游标进行更新和删除操作时,则需要使用where current of 语句,这个是标示出当前游标的位置.

If you plan on updating or deleting records that have been referenced by a select for update statement, you can use the Where Current Of statement.

语法如下:The syntax for the Where Current Of statement is either:

UPDATE table_name
SET set_clause
WHERE CURRENT OF cursor_name;

OR

DELETE FROM table_name
WHERE CURRENT OF cursor_name;


在这时的例子中我采用上面所建的test表来试验.

2.1 更新.

SQL> DECLARE
2 CURSOR test_cur IS SELECT * FROM test
3 FOR UPDATE OF sal;
4 BEGIN
5 FOR test_rec IN test_cur LOOP
6 UPDATE test
7 SET sal = test_rec.sal +1
8 WHERE CURRENT OF test_cur;
9 END LOOP;
10 COMMIT;
11 END;
12 /

PL/SQL 过程已成功完成。

2.2 删除.

SQL> DECLARE
2 CURSOR test_cur IS select * from test for update;
3 BEGIN
4 FOR test_rec IN test_cur LOOP
5 DELETE FROM test WHERE CURRENT OF test_cur;
6 END LOOP;
7 END;
8 /

PL/SQL 过程已成功完成。

文中的游标只是简单的使用,在记录到pl/sql详细编程的时候会再讲到时会结合oracle的执行计划并一起讨论它们的执行效率.


注:文中的英文注解部分出自:http://www.techonthenet.com/oracle/cursors/current_of.php

/

分享到:
评论

相关推荐

    Oracle游标使用方法及语法大全

    在 UPDATE 和 DELETE 语句中,可以使用 WHERE CURRENT OF 子句来指定要更新或删除的数据行,例如: ```sql UPDATE emp SET sal = r_emp.sal * 1.1 WHERE CURRENT OF c_emp; ``` 这里使用 WHERE CURRENT OF 子句来...

    Oracle游标使用方法及语法大全.doc

    使用`WHERE CURRENT OF`子句可以在游标中执行更新或删除操作,此操作需要在声明游标时使用`FOR UPDATE`子句确保数据行锁定。 ```sql DECLARE CURSOR c1 IS SELECT empno, salary FROM emp WHERE comm IS NULL FOR...

    oracle 游标 深入浅出 详解 精析 示例

    游标可以与`FOR UPDATE`子句结合,允许在`WHERE CURRENT OF`子句中更新或删除当前行。例如: ```sql DECLARE CURSOR c_update IS SELECT * FROM employees WHERE salary < 50000 FOR UPDATE; v_id employees.id%...

    快速练习ORACLE游标习题及答案

    根据提供的文件信息,我们可以归纳出以下Oracle游标的使用方法及相关知识点: ### 一、游标的基本概念 在Oracle数据库中,游标是一种重要的机制,它允许用户从查询结果集中逐行检索数据。游标可以分为两种类型:**...

    oracle游标案例

    UPDATE employees SET salary = salary * 1.1 WHERE CURRENT OF emp_cursor; END LOOP; CLOSE emp_cursor; END; / ``` 这段代码首先声明了一个游标emp_cursor,用于获取department_id为100的所有员工。然后,...

    Oracle游标使用方法及语法大全[整理].pdf

    4. **游标中的更新和删除**:在PL/SQL中,可以使用UPDATE和DELETE语句结合WHERE CURRENT OF子句更新或删除游标当前指向的数据行。首先需要在声明游标时使用FOR UPDATE子句来锁定行。例如: ```sql DECLARE CURSOR...

    ORACLE 游标 异常 存储过程

    -- 更新代码,如: UPDATE table_name SET column1 = new_value WHERE CURRENT OF cursor_name; END LOOP; CLOSE cursor_name; END; ``` 总结,Oracle游标在处理数据时提供了极大的灵活性,特别是在编写存储...

    ORACLE 游标学习笔记

    在处理过程中需要删除或更新行时,需要使用`SELECT...FOR UPDATE`语句来锁定行,然后在`UPDATE`或`DELETE`语句中使用`WHERE CURRENT OF`子句指定当前游标行。 **循环游标** 循环游标简化了处理游标的方式,通过`FOR...

    oracle的update的五种方式

    例如:`BEGIN FOR cr IN (SELECT * FROM t_join_situation WHERE year='2011') LOOP UPDATE t_join_situation SET join_state='1' WHERE current of cr; END LOOP`。这种方式适用于大批量数据的更新,但需要注意游标...

    Oracle游标实例.txt

    UPDATE test_main SET value = value || '1' WHERE CURRENT OF c_test_main; FETCH c_test_main INTO v_id, v_value; END LOOP; CLOSE c_test_main; END; ``` 此段代码展示了如何使用带有`FOR UPDATE`子句的...

    oracle游标使用大全3

    ### Oracle游标使用详解 #### 一、Oracle游标简介 在Oracle数据库中,游标是一种用于处理查询结果集的强大工具。它允许用户通过循环结构逐行读取数据,并进行相应的处理。游标分为显式游标和隐式游标两种类型。 -...

    使用游标更新数据库

    * 在 FOR UPDATE 子句中使用 CURRENT OF 指定锁定的列后,程序块中的 UPDATE 语句只能更新 OF 指定的列。 * 如果使用 NOWAIT 子句,那么如果游标结果集中某一行已经被其他用户锁定,那么立即返回并给出错误提示。 * ...

    oracle 游标

    UPDATE table_name SET column1 = new_value WHERE CURRENT OF cursor_name; END LOOP; CLOSE cursor_name; END; / ``` 以上就是Oracle游标的主要类型和用法。通过合理利用游标,我们可以更高效地处理数据库中...

    oracle中游标的使用

    UPDATE employees SET sal = sal * 1.1 WHERE CURRENT OF cur_emp; END LOOP; CLOSE cur_emp; END; ``` 3. **带参数的游标**:我们可以定义带有参数的游标,这些参数可以在运行时传递,使游标更加灵活。例如:...

    oracle游标大全

    WHERE CURRENT OF c1; END LOOP; CLOSE c1; END; ``` #### 四、示例应用 **1. 示例:员工离职处理** - 创建存储过程`FIRE_EMPLOYEE`来处理员工离职。 - **过程定义**: ```sql CREATE OR REPLACE ...

    Oracle数据库添加 更新 游标 过程 Java Project

    WHERE CURRENT OF emp_curs; END LOOP; CLOSE emp_curs; END; / ``` 这段PL/SQL代码声明了一个游标`emp_curs`,遍历所有职位为“经理”的员工,然后逐个更新他们的职位为“总监”。 对于Java项目来说,通常会...

    关于游标的说明与使用方法

    UPDATE emp SET sal = sal + 0.1 WHERE CURRENT OF emp_cur; END LOOP; END; ``` #### 结论 游标是Oracle数据库中非常重要的特性之一,它为用户提供了一种灵活高效地处理查询结果的方法。无论是简单查询还是...

    Oracle显示游标的使用及游标for循环

    UPDATE emp SET sal=sal-1000 WHERE CURRENT OF emp_cur; END LOOP; COMMIT; END; ``` 4. **游标属性**: - `%FOUND`:如果最近一次FETCH操作成功,该属性为TRUE。 - `%NOTFOUND`:如果最近一次FETCH操作...

Global site tag (gtag.js) - Google Analytics