End; / 7,怎样更新和删除显示游标中的记录? ①UPDATE或DELETE语句中的WHERE CURRENT OF子串专门处理要执行UPDATE或DELETE操 作的表中取出的最近的数据。 要使用这个方法,在声明游标时必须使用FOR UPDATE子串,当对话使用FOR UPDATE子串打 开一个游标时, 所有返回集中的数据行都将处于行级 (ROW-LEVEL)独占式锁定, 其他对象只能查询这些数据 行, 不能进行UPDATE、DELETE或SELECT...FOR UPDATE操作。 在多表查询中,使用OF子句来锁定特定的表,如果忽略了OF子句,那么所有表中选择的数据 行都将被锁定。 如果这些数据行已经被其他会话锁定,那么正常情况下ORACLE将等待,直到数据行解锁。 ②使用更新或删除: ⑴声明更新或删除显示游标: Cursor 游标名 IS Cursor 游标名 IS Update Delete 表名 From SELECT 语句 SELECT 语句 更新语句 Where For Update [ Of For Delete [ Of Where Current Current Of Of 更新列列名]; 更新列列名]; 游标名;
⑵使用显示游标当前记录来更新或删除: SET 表名 游标名;
例子1:更新显示游标记录 /*conn scott/tiger*/ Declare Cursor myCur is select job from emp for update; vjob empa.job%type; rsal empa.sal%type; Begin open myCur; loop fetch myCur into vjob; exit when myCur%notFound; case when when else rsal := 0.5; end case; update emp set sal = sal + rsal where current of myCur; end loop; End; / (vjob) rsal := 0.1; rsal := 0.3; 'CLERK' then rsal := 0.2; when 'ANALYST' then 'MANAGER' then
例子2:删除显示游标记录 /*conn scott/tiger Crate table */ Declare Cursor MyCursor vSal Begin Loop Fetch Exit If End End End;/ 8,什么是带参数的显示游标? ①与过程和函数相似,可以将参数传递给游标并在查询中使用。 参数只定义数据类型,没有大小(所有Oracle中的形参只定义数据类型,不指定大小)。 与过程不同的是,游标只能接受传递的值,而不能返回值。 可以给参数设定一个缺省值,当没有参数值传递给游标时,就使用缺省值。 游标中定义的参数只是一个占位符,在别处引用该参数不一定可靠。 ②使用带参数的显示游标 ⑴声明带参数的显示游标: CURSOR 游标名 [(parameter[,parameter],...)] 数据类型 DEFAULT 默认值 IS Select语句;; MyCursor When InTo vSal; MyCursor%NotFound; Where Cursor Of MyCursor; Select JOB From empa For Update; emp.Sal%TYPE; empa Select * from scott.emp;
vSal < 800 Then From empa If; Loop;
Delete
参数形式:1,参数名 2,参数名
数据类型
例子: /*conn scott/tiger Crate table */ Declare Cursor MyCursor(pSal empa Where varA Begin Loop Fetch Exit MyCursor When InTo varA; '||varA.empno||' MyCursor%NotFound; '||varA.sal); SAL > pSal ; Number Default 800) Select JOB From empa Select * from scott.emp;
MyCursor%ROWTYPE;
DBMS_OUTPUT.PUT_LINE(MyCursor%RowCount||' '||varA.ename||' End Loop;
End;/ 思考: 怎样将游标作为参数传递? 本文来自CSDN博客,转载请标明出处: