怎么创建oracle游标 oraclefor游标

Oracle下如何用sql创建游标For 循环游标
(1)定义游标
(2)定义游标变量
(3)使用for循环来使用这个游标
declare
--类型定义
cursor c_job
is
select empno,ename,job,sal
from emp
where job='MANAGER';
--定义一个游标变量v_cinfo c_emp%ROWTYPE ,该类型为游标c_emp中的一行数据类型
c_row c_job%rowtype;
begin
for c_row in c_job loop
dbms_output.put_line(c_row.empno||'-'||c_row.ename||'-'||c_row.job||'-'||c_row.sal);
end loop;
end;
Fetch游标
使用的时候必须要明确的打开和关闭
declare
--类型定义
cursor c_job
is
select empno,ename,job,sal
from emp
where job='MANAGER';
--定义一个游标变量
c_row c_job%rowtype;
begin
open c_job;
loop
--提取一行数据到c_row
fetch c_job into c_row;
--判读是否提取到值,没取到值就退出
--取到值c_job%notfound 是false
--取不到值c_job%notfound 是true
exit when c_job%notfound;
dbms_output.put_line(c_row.empno||'-'||c_row.ename||'-'||c_row.job||'-'||c_row.sal);
end loop;
--关闭游标
close c_job;
end;
oracle中如何定义一个游标?1.游标定义:\x0d\x0acursor XXXA is\x0d\x0aSELECT 语句;\x0d\x0aXXXB cursorName%rowtype;\x0d\x0a\x0d\x0aXXXA: 游标名\x0d\x0aXXXB: 游标行数据定义\x0d\x0a\x0d\x0a2. 打开游标:\x0d\x0a-- 打开之前最好先关一下,防止上次发生异常没有关掉而引发不必要的异常\x0d\x0a IFXXXA%ISOPEN THEN\x0d\x0aCLOSE XXXA;\x0d\x0aEND IF;\x0d\x0a\x0d\x0aOpen XXXA ;\x0d\x0aLoop\x0d\x0aFetch XXXA into XXXB;\x0d\x0aexit when XXXA%NOTFOUND;\x0d\x0a... ... 处理逻辑\x0d\x0aend loop;\x0d\x0aclose XXXA;
Oracle游标sql语句代码块的优化游标操作的优化怎么创建oracle游标:
-- 有一个表格怎么创建oracle游标,存储的是用户的名字怎么创建oracle游标,将emp表中所有的用户名转换成小写怎么创建oracle游标,再写入这个表格
create table ename_emp(
ename varchar2(50)
);
-- 下面这个游标的操作 , 需要 43s时间才能完成
declare
begin
for i in (select ename from emp_liebiao) loop
insert into ename_emp values(lower(i.ename));
commit;
end loop;
end;
-- 因为游标是以行为单位进行数据的操作的,所有游标的效率是比较慢的,而且游标需要消耗的内存也是比较多的,我们需要将游标以行进行操作的方式,修改成一次性操作所有数据的批量的方式 。
批量操作在游标里面 叫做bulk collect
第一步,创建一个表类型
type表类型的名字istable of表名.列名%type;
变量名 表类型的名字;
第三步,创建一个游标,读取某个查询的结果
cursor游标名字isselect查询语句;
第四步,打开游标
open游标名字;
第五步,捕获游标的数据,将内容给到表类型的变量进行保存
fetch游标名字bulk collect into变量名字;
第六步,使用 forall 语句,对数据进行批量的操作
forall i in变量.first ..变量.last DML语句操作;
第七步,关闭游标
close游标名字;
declare
-- 创建表类型
type biao is table of emp_liebiao.ename%type;
b biao;
-- 创建游标
cursor m is select ename from emp_liebiao;
begin
-- 打开游标
open m;
-- 将游标的内容批量的给到变量
fetch m bulk collect into b;
-- 使用forall批量修改数据
forall i in b.first .. b.last insert into ename_emp values(lower(b(i)));
commit;
-- 关闭游标
close m;
end;
练习:批量修改用户的编号,让编号 工资等级 部门,形成一个新的编号,存入下面的表格中,使用bulk collect来实现 。
2000以下是 C ,2000-3000是 B ,3000以上是 A ,
例如 SMITH ,新编号应该是7369_C_20
create table empno_emp(
empno varchar2(50)
);
declare
type biao is table of emp_liebiao%rowtype;
b biao;
cursor m is select * from emp_liebiao;
begin
open m;
fetch m bulk collect into b;
forall i in b.first..b.last
insert into empno_emp values(
b(i).empno||'_'||decode(sign(b(i).sal-2000) sign(b(i).sal-3000),-2,'C',2,'A','B')||'_'||b(i).deptno
);
commit;
close m;
end;
【怎么创建oracle游标 oraclefor游标】关于怎么创建oracle游标和oraclefor游标的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站 。

    推荐阅读