最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501
当前位置: 首页 - 科技 - 知识百科 - 正文

【Oracle篇】游标的原理和使用

来源:懂视网 责编:小采 时间:2020-11-09 08:10:03
文档

【Oracle篇】游标的原理和使用

【Oracle篇】游标的原理和使用:一、游标是构件在PL/SQL中,用来查询数据库,获取记录集合或者结果集合的指针,它可以让开发者一次访问一行结果集。 Oracle中游标的分类: 显示游标 隐式游标 1、显示游标是早期定义的用于处理多行结果集的游标。 2、隐式游标是由Oracle定的,它是和单行s
推荐度:
导读【Oracle篇】游标的原理和使用:一、游标是构件在PL/SQL中,用来查询数据库,获取记录集合或者结果集合的指针,它可以让开发者一次访问一行结果集。 Oracle中游标的分类: 显示游标 隐式游标 1、显示游标是早期定义的用于处理多行结果集的游标。 2、隐式游标是由Oracle定的,它是和单行s

一、游标是构件在PL/SQL中,用来查询数据库,获取记录集合或者结果集合的指针,它可以让开发者一次访问一行结果集。 Oracle中游标的分类: 显示游标 隐式游标 1、显示游标是早期定义的用于处理多行结果集的游标。 2、隐式游标是由Oracle定的,它是和单行sele


一、游标是构件在PL/SQL中,用来查询数据库,获取记录集合或者结果集合的指针,它可以让开发者一次访问一行结果集。
Oracle中游标的分类:
显示游标
隐式游标


1、显示游标是早期定义的用于处理多行结果集的游标。
2、隐式游标是由Oracle定的,它是和单行select…into语句,INSERT语句、UPDATE和DELETE语句关联在一起使用的

二、显示游标的属性
%FOUND 指明是否取到了指定的记录行
%ISOPEN 指明游标是打开的还是关闭的
%NOTFOUND 指示FETCH是否失败或是否还有可取的记录行
%ROWCOUNT 指明总共取到了多少行数据


--1-对所有员工,如果职位是manager 并且在dallas工作,那么给他加薪15%
--如果职位是clerk,并且在new york工作的扣薪5%;其他情况不作处理

declare
cursor cur_emp is select e.*,d.loc,d.dname from emp e,dept d
where e.deptno=d.deptno for update of e.empno;
begin
for v_emp in cur_emp loop
if v_emp.job = 'MANAGER' and v_emp.loc = 'DALLAS'
then
update emp set sal=sal*1.15 where current of cur_emp;

elsif v_emp.job = 'CLERK' and v_emp.loc = 'NEW YORK'
then
update emp set sal=sal*0.95 where current of cur_emp;
end if;
end loop;
end;


--2-对直接上级是'BLAKE'的所有员工,按照参加工作时间加薪;
--81年6月以前的加薪10%
select to_number(to_char(e.hiredate,'yy.mm'),'99.90') date_num from emp e;
select to_number('1981-6-1','99.90') date_num from dual;

select e.hiredate
from emp e;
if to_number(to_char(e.hiredate,'yy.mm'),'99.99') update emp set sal=sal*1.1;

--81年6月以后的加薪5%
if to_number(to_char(e.hiredate,'yy.mm'),'99.99')>to_number(to_char('1981-6-1','yy.mm'),'99.99');
update emp set sal=sal*1.05;
--substr('abcdef',3,2)/to_number('','');

-- 直接上级是'BLAKE'的所有员工
-------------------------------------------------------------
select empno,lpad(' ',level*2)||ename
from emp e
start with job='CLERK' connect by prior empno=mgr
--------------------------------------------------------------
select empno,lpad(' ',level*2)||ename
from emp e
start with ename='SCOTT' connect by prior --mgr=empno
empno=mgr

--------------------**************************------------------------
declare
cursor cur_emp is select empno,lpad(' ',level*2)||ename,e.hiredate
from emp e
start with job='CLERK'
connect by prior empno=mgr for update;

v_date emp.hiredate%type;
begin
--open cur_emp;
v_date:=to_date('1981-6-1','yyyy:mm:dd');
for v_emp in cur_emp loop
if to_number(to_char(v_emp.hiredate,'yy.mm'),'99.99') then
update emp set sal=sal*1.1;

elsif to_number(to_char(v_emp.hiredate,'yy.mm'),'99.99')>to_number(to_char(v_date,'yy.mm'),'99.99')
then
update emp set sal=sal*1.05;
end if;
end loop;
--close cur_emp;
end;

--3 -移动收费 执行一次扣一次费
--写一个存储过程,执行一次,更新table2中余额,按照 table1要求,减少(要求使用更新游标)

-- table 1 --
create table sermobile(
serno number,
sername varchar2(10),
sersale number
);
alter table sermobile add constraints pk_sno primary key(serno);
drop table sermobile;

insert into sermobile values(1,'套餐1',40);
insert into sermobile values(2,'套餐2',50);
insert into sermobile values(3,'套餐3',60);
insert into sermobile values(4,'套餐4',70);

-- table2 --
create table seruser(
uno number,
uname varchar2(10),
serno number,
usal number
);

alter table seruser add constraints pk_uno primary key(uno);
alter table seruser add constraints fk_sno foreign key(serno) references sermobile(serno);

insert into seruser values(1001,'用户1',1,500);
insert into seruser values(1002,'用户2',2,500);
insert into seruser values(1003,'用户3',3,500);
insert into seruser values(1004,'用户4',4,500);
insert into seruser values(1005,'用户5',1,500);
insert into seruser values(1006,'用户6',2,500);
insert into seruser values(1007,'用户7',3,500);
insert into seruser values(1008,'用户8',4,500);
insert into seruser values(1009,'用户9',1,500);

declare
cursor cur_ser is select ser.*,us.uname,us.uno
from sermobile ser,seruser us
where ser.serno=us.serno for update of us.uno;

begin
for v_row in cur_ser loop
if v_row.serno=1 then
update seruser set usal=usal-40 where current of cur_ser;

elsif v_row.serno=2 then
update seruser set usal=usal-50 where current of cur_ser;

elsif v_row.serno=3 then
update seruser set usal=usal-60 where current of cur_ser;

elsif v_row.serno=4 then
update seruser set usal=usal-70 where current of cur_ser;
end if;
end loop;
end;


声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文档

【Oracle篇】游标的原理和使用

【Oracle篇】游标的原理和使用:一、游标是构件在PL/SQL中,用来查询数据库,获取记录集合或者结果集合的指针,它可以让开发者一次访问一行结果集。 Oracle中游标的分类: 显示游标 隐式游标 1、显示游标是早期定义的用于处理多行结果集的游标。 2、隐式游标是由Oracle定的,它是和单行s
推荐度:
标签: 使用 原理 用法
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top