77范文网 - 专业文章范例文档资料分享平台

05Oracle第五课(2)

来源:网络收集 时间:2019-04-14 下载这篇文档 手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:或QQ: 处理(尽可能给您提供完整文档),感谢您的支持与谅解。点击这里给我发消息

流程控制

选择结构

1、if语句

1、if 条件表达式 then ... end if;

2、if 条件表达式 then ... else ... end if;

3、if 条件表达式 then ... elsif 条件表达式 then ... end if;

范例:向emp表插入新的数据, 诸如以下信息:编号1234,姓名tom,部门20

declare v_empno emp.empno%type; v_ename emp.ename%type; v_deptno emp.deptno%type; v_num int; begin v_empno := &empno; v_ename := &ename; v_deptno := &deptno; select count(*) INTO v_num from emp where empno = v_empno; if v_num = 0 then insert into emp(empno,ename,deptno) values (v_empno,v_ename,v_deptno); commit; dbms_output.put_line('新员工添加成功'); else dbms_output.put_line('已经存在此员工号'); end if; end; 范例:根据以下规则修改员工的工资:

部门号 增加幅度 10 20% 20 15% 30 18%

通过输入用户的编号,自动修改

2、case语句

1、

case 条件表达式 when 结果1 then 操作1; ...

when 结果n then 操作n; esle

操作n+1; end case; 2、 case

when 条件表达式1 then 操作1; ...

when 条件表达式1 then 操作n; else

操作n+1; end case;

范例:根据以下规则修改员工的工资:

部门号 增加幅度

10 20% 20 15% 30 18%

通过输入用户的编号,自动修改

declare v_inc number(6,2); v_empno emp.empno%type; v_sal emp.sal%type; v_deptno emp.deptno%type; begin v_empno := &empno; select sal,deptno INTO v_sal,v_deptno from emp where empno = v_empno; case v_deptno when 10 then v_inc := v_sal*0.2; when 20 then v_inc := v_sal*0.15; when 30 then v_inc := v_sal*0.18; else v_inc := 0; end case; update emp set sal=sal+v_inc where empno = v_empno; commit; end; 循环结构:

1、loop ... end loop 1、 loop

操作...

exit when 条件表达式

操作... end loop; 2、 loop

操作...

if 条件表达式 then exit; end if; 操作...

end loop; 2、for ... loop

for 索引变量 in [reverse] 起始值 .. 结束值 loop 操作 end loop;

3、while ... loop

while 条件表达式 loop 操作 end loop; 范例:计算1到100的累积

复合数据类型

1、record类型:多个成员变量,每一个成员变量的类型可以不同,类似于C中结构体 2、table类型:多个成员变量,类型相同,C中数组 3、游标类型及引用游标变量

record类型:

1、声明类型

type type_name is record(...) 2、声明变量

var_name type_name;

--输入员工的编号,输出姓名、工资和岗位。 declare v_empno emp.empno%type; TYPE my_record is record( v_ename emp.ename%type, v_sal emp.sal%type, v_job emp.job%type ); v_inf my_record; begin v_empno := &empno; select ename,sal,job INTO v_inf from emp where empno = v_empno; dbms_output.put_line(v_inf.v_ename); dbms_output.put_line(v_inf.v_sal); dbms_output.put_line(v_inf.v_job); end; %rowtype类型:行的锚定

--输入员工的编号,输出姓名、工资和岗位。 declare v_empno emp.empno%type; v_inf emp%rowtype; --特殊的Record类型,把列名作为成员变量名 begin v_empno := &empno; select * INTO v_inf from emp where empno = v_empno; dbms_output.put_line(v_inf.ename); dbms_output.put_line(v_inf.sal); dbms_output.put_line(v_inf.job); end; table类型:

1、声明类型

type type_name is table of type index by binary_integer; 2、声明变量

var_name type_name;

--输入部门号,输出部门中所有姓名。 declare TYPE my_tab is table of varchar2(15) index by binary_integer; v_ename_tab my_tab; v_count int; v_deptno emp.deptno%type; begin v_deptno := &deptno; select count(*) into v_count from emp where deptno =v_deptno; for i in 1 .. v_count loop select ename into v_ename_tab(i) from (select rownum ID,emp.* from emp where deptno = v_deptno) where id = i; end loop; for x in 1 .. v_count loop dbms_output.put_line(v_ename_tab(x)); end loop; end; 游标:

游标是一个指针,指向游标定义的SQL语句的结果集的内存上下文 游标本身不存储数据,只是定义一个指向内存区域的指针

游标数据默认是静态的,游标打开后,不能反映新的数据变化

游标对应的指针是一个自动处理的指针,对游标执行fetch后,游标会自动移动 游标分为:显式游标和隐式游标

显式游标:由用户自己声明和使用的游标,所有的操作必须用户参与 显式游标的基本操作:

1、声明游标:描述用户需要的数据是那些。 CURSOR 游标名 [(参数列表)] [RETURN 类型] IS SQL语句

2、打开游标:将用户需要的数据读取到内存上下文,游标指针自动指向此上下文 区域的第一行 open 游标名[实参列表];

3、提取游标:将当前行的数据进行相关操作 fetch 游标名 into 变量列表或record类型; 4、关闭游标:释放内存 close 游标名 范例:显示emp表的所有的员工名、工资和部门号 范例:根据输入的部门号,显示部门中的员工姓名和工资 游标属性:

对象.属性名(Java) 游标名%属性名

%isopen(cur1%isopen):如果游标被打开了,取值true

%found:如果最近一次fetch返回了新的数据,取值true

%notfound:如果最近一次fetch返回的数据没有变化(没有提取到数据),取值true %rowcount:返回最近一次提取的行的编号。游标每一行自动添加编号,编号从1开始 declare cursor mycur is select sal,job from emp; v_sal emp.sal%type; v_job emp.job%type; begin if not mycur%isopen then open mycur; end if; loop fetch mycur into v_sal,v_job; exit when mycur%notfound; dbms_output.put_line(mycur%rowcount||' '||v_sal||' '||v_job); end loop; dbms_output.put_line('总共有'||mycur%rowcount||'行'); close mycur;

百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库05Oracle第五课(2)在线全文阅读。

05Oracle第五课(2).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印 下载失败或者文档不完整,请联系客服人员解决!
本文链接:https://www.77cn.com.cn/wenku/zonghe/590202.html(转载请注明文章来源)
Copyright © 2008-2022 免费范文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ: 邮箱:tiandhx2@hotmail.com
苏ICP备16052595号-18
× 注册会员免费下载(下载后可以自由复制和排版)
注册会员下载
全站内容免费自由复制
注册会员下载
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: